Función CertVerifyCertificateChainPolicy (wincrypt.h)

La función CertVerifyCertificateChainPolicy comprueba una cadena de certificados para comprobar su validez, incluido su cumplimiento con los criterios de directiva de validez especificados.

Sintaxis

BOOL CertVerifyCertificateChainPolicy(
  [in]      LPCSTR                    pszPolicyOID,
  [in]      PCCERT_CHAIN_CONTEXT      pChainContext,
  [in]      PCERT_CHAIN_POLICY_PARA   pPolicyPara,
  [in, out] PCERT_CHAIN_POLICY_STATUS pPolicyStatus
);

Parámetros

[in] pszPolicyOID

Las estructuras de directivas de cadena de comprobación predefinidas actuales se enumeran en la tabla siguiente.

Value Significado
CERT_CHAIN_POLICY_BASE
(LPCSTR) 1
Implementa las comprobaciones de comprobación de directivas de cadena base. El miembro dwFlags de la estructura a la que apunta pPolicyPara se puede establecer para modificar el comportamiento predeterminado de comprobación de directivas.
CERT_CHAIN_POLICY_AUTHENTICODE
(LPCSTR) 2
Implementa las comprobaciones de comprobación de directivas de cadena Authenticode. El miembro pvExtraPolicyPara de la estructura a la que apunta pPolicyPara se puede establecer para que apunte a una estructura de AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA .

El miembro pvExtraPolicyStatus de la estructura a la que apunta pPolicyStatus se puede establecer para que apunte a una estructura de AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS.

CERT_CHAIN_POLICY_AUTHENTICODE_TS
(LPCSTR) 3
Implementa comprobaciones de comprobación de directivas de cadena de marca de tiempo authenticode. El miembro pvExtraPolicyPara de la estructura de datos a la que apunta pPolicyPara se puede establecer para que apunte a una estructura de AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA.

El miembro pvExtraPolicyStatus de la estructura de datos a la que apunta pPolicyStatus no se usa y debe establecerse en NULL.

CERT_CHAIN_POLICY_SSL
(LPCSTR) 4
Implementa las comprobaciones de comprobación de directivas de cadena de cliente/servidor SSL. El miembro pvExtraPolicyPara de la estructura de datos a la que apunta pPolicyPara se puede establecer para que apunte a una estructura de SSL_EXTRA_CERT_CHAIN_POLICY_PARA inicializada con criterios de directiva adicionales.
Nota Para diferenciar entre los certificados de autorización de cliente y servidor, la llamada a la función CertGetCertificateChain para obtener el contexto de cadena debe especificar el tipo de certificado estableciendo el uso esperado. Establezca el uso esperado estableciendo el miembro RequestedUsage de la estructura de CERT_CHAIN_PARA pasada en el parámetro de entrada pChainPara de la función CertGetCertificateChain .
 
CERT_CHAIN_POLICY_BASIC_CONSTRAINTS
(LPCSTR) 5
Implementa la directiva de cadena de restricciones básicas. Recorre en iteración todos los certificados de la comprobación de cadena de una szOID_BASIC_CONSTRAINTS o una extensión de szOID_BASIC_CONSTRAINTS2. Si ninguna extensión está presente, se supone que el certificado tiene una directiva válida. De lo contrario, para el primer elemento de certificado, comprueba si coincide con el CA_FLAG esperado o END_ENTITY_FLAG especificado en el miembro dwFlags de la estructura CERT_CHAIN_POLICY_PARA a la que apunta el parámetro pPolicyPara . Si no se establecen ninguna o ambas marcas, el primer elemento puede ser una ENTIDAD de certificación o END_ENTITY. Todos los demás elementos deben ser una entidad de certificación (CA). Si PathLenConstraint está presente en la extensión, se comprueba.

Los primeros elementos de las cadenas simples restantes (es decir, los certificados usados para firmar el CTL) se comprueban como un END_ENTITY. Si se produce un error en esta comprobación, dwError se establecerá en TRUST_E_BASIC_CONSTRAINTS.

CERT_CHAIN_POLICY_NT_AUTH
(LPCSTR) 6
Implementa la directiva de cadena de autenticación de Windows NT, que consta de tres comprobaciones de cadena distintas en el orden siguiente:
  1. CERT_CHAIN_POLICY_BASE: implementa las comprobaciones de comprobación de directivas de cadena base. La LOWORD de dwFlags se puede establecer en pPolicyPara para modificar el comportamiento predeterminado de comprobación de directivas. Para obtener más información, consulte CERT_CHAIN_POLICY_BASE.
  2. CERT_CHAIN_POLICY_BASIC_CONSTRAINTS: implementa la directiva de cadena de restricciones básicas. El HIWORD de dwFlags se puede establecer para especificar si el primer elemento debe ser una ENTIDAD de certificación o END_ENTITY. Para obtener más información, consulte CERT_CHAIN_POLICY_BASIC_CONSTRAINTS.
  3. Comprueba si el segundo elemento de la cadena, la ENTIDAD de certificación que emitió el certificado final, es una CA de confianza para la autenticación de Windows NT. Una ENTIDAD de certificación se considera de confianza si existe en el almacén del registro del sistema "NTAuth" que se encuentra en la ubicación del almacén de CERT_SYSTEM_STORE_LOCAL_MACHINE_ENTERPRISE. Si se produce un error en esta comprobación, la entidad de certificación no es de confianza y dwError se establece en CERT_E_UNTRUSTEDCA. Si CERT_PROT_ROOT_DISABLE_NT_AUTH_REQUIRED_FLAG se establece en el valor Flags de la subclave ProtectedRoots de HKEY_LOCAL_MACHINE directiva, definida por CERT_PROT_ROOT_FLAGS_REGPATH y se produce un error en la comprobación anterior, la cadena se comprueba para CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS establecido en dwInfoStatus. Esto se establece si había una restricción de nombre válida para todos los espacios de nombres, incluido EL UPN. Si la cadena no tiene establecido este estado de información, dwError se establece en CERT_E_UNTRUSTEDCA.
CERT_CHAIN_POLICY_MICROSOFT_ROOT
(LPCSTR) 7
Comprueba el último elemento de la primera cadena simple para una clave pública raíz de Microsoft. Si ese elemento no contiene una clave pública raíz de Microsoft, el miembro dwError de la estructura CERT_CHAIN_POLICY_STATUS a la que apunta el parámetro pPolicyStatus se establece en CERT_E_UNTRUSTEDROOT.

El miembro dwFlags de la estructura CERT_CHAIN_POLICY_PARA a la que apunta el parámetro pPolicyStatus puede contener la marca MICROSOFT_ROOT_CERT_CHAIN_POLICY_CHECK_APPLICATION_ROOT_FLAG , lo que hace que esta función compruebe en su lugar la raíz de la aplicación de Microsoft "Entidad de certificación raíz de Microsoft 2011".

El miembro dwFlags de la estructura CERT_CHAIN_POLICY_PARA a la que apunta el parámetro pPolicyPara puede contener la marca MICROSOFT_ROOT_CERT_CHAIN_POLICY_ENABLE_TEST_ROOT_FLAG , lo que hace que esta función también compruebe las raíces de prueba de Microsoft.

Nota Este identificador de objeto de directiva (OID) no realiza ninguna comprobación de comprobación de directiva por sí misma, está pensada para usarse junto con otras directivas.
 
CERT_CHAIN_POLICY_EV
(LPCSTR) 8
Especifica que se realiza la validación extendida de certificados.

Windows Server 2008, Windows Vista, Windows Server 2003 y Windows XP: Este valor no se admite.

CERT_CHAIN_POLICY_SSL_F12
(LPCSTR) 9
Comprueba si algún certificado de la cadena tiene cifrado débil o si el cumplimiento de certificados raíz de terceros y proporciona una cadena de error. El miembro pvExtraPolicyStatus de la estructura CERT_CHAIN_POLICY_STATUS a la que apunta el parámetro pPolicyStatus debe apuntar a SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS, que se actualiza con los resultados de las comprobaciones de cumplimiento del programa criptográfico y raíz débiles.

Antes de llamar a , el miembro cbSize de la estructura CERT_CHAIN_POLICY_STATUS a la que apunta el parámetro pPolicyStatus debe establecerse en un valor mayor o igual que sizeof(SSL_F12_EXTRA_CERT_CHAIN_POLICY_STATUS).

El miembro dwError de CERT_CHAIN_POLICY_STATUS estructura a la que apunta el parámetro pPolicyStatus se establecerá en TRUST_E_CERT_SIGNATURE para la posible criptografía débil y se establecerá en CERT_E_UNTRUSTEDROOT para raíces de terceros que no cumplan con el programa raíz de Microsoft.

Windows 10, versión 1607, Windows Server 2016, Windows 10, versión 1511 con KB3172985, Windows 10 RTM con KB3163912, Windows 8.1 y Windows Server 2012 R2 con KB3163912 y Windows 7 con SP1 y Windows Server 2008 R2 SP1 con KB3161029

[in] pChainContext

Puntero a una estructura de CERT_CHAIN_CONTEXT que contiene una cadena que se va a comprobar.

[in] pPolicyPara

Puntero a una estructura de CERT_CHAIN_POLICY_PARA que proporciona los criterios de comprobación de directivas para la cadena. El miembro dwFlags de esa estructura se puede establecer para cambiar el comportamiento predeterminado de comprobación de directivas.

Además, los parámetros específicos de la directiva también se pueden pasar en el miembro pvExtraPolicyPara de la estructura.

[in, out] pPolicyStatus

Puntero a una estructura de CERT_CHAIN_POLICY_STATUS donde se devuelve información de estado de la cadena. El estado adicional específico del OID se puede devolver en el miembro pvExtraPolicyStatus de esta estructura.

Valor devuelto

El valor devuelto indica si la función pudo comprobar la directiva, no indica si se produjo un error en la comprobación de directiva o se pasó.

Si la cadena se puede comprobar para la directiva especificada, se devuelve TRUE y se actualiza el miembro dwError de pPolicyStatus . Un dwError de 0 (ERROR_SUCCESS o S_OK) indica que la cadena satisface la directiva especificada.

Si no se puede validar la cadena, el valor devuelto es TRUE y debe comprobar el parámetro pPolicyStatus para el error real.

Un valor false indica que la función no pudo comprobar la directiva.

Comentarios

Un miembro dwError de la estructura CERT_CHAIN_POLICY_STATUS a la que apunta pPolicyStatus puede aplicarse a un único elemento de cadena, a una cadena simple o a un contexto de cadena completo. Si dwError se aplica a todo el contexto de cadena, los miembros lChainIndex y lElementIndex de la estructura de CERT_CHAIN_POLICY_STATUS se establecen en –1. Si dwError se aplica a una cadena simple completa, lElementIndex se establece en –1 y lChainIndex se establece en el índice de la primera cadena que tiene un error. Si dwError se aplica a un único elemento de certificado, lChainIndex y lElementIndex indexa el primer certificado que tiene el error.

Para obtener el elemento certificate, use esta sintaxis:

pChainContext->rgpChain[lChainIndex]->rgpElement[lElementIndex];

Use la función CertGetCertificateChain para habilitar y realizar la comprobación de revocación de certificados. La función CertVerifyCertificateChainPolicy no comprueba si se revocan los certificados de la cadena de certificados.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA

AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_STATUS

AUTHENTICODE_TS_EXTRA_CERT_CHAIN_POLICY_PARA

CERT_CHAIN_CONTEXT

CERT_CHAIN_POLICY_PARA

CERT_CHAIN_POLICY_STATUS

CertGetCertificateChain

Funciones de comprobación de la cadena de certificados