Compartir a través de


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.

Valor Significado
CERT_CHAIN_POLICY_BASE
(LPCSTR) 1
Implementa las comprobaciones de comprobación de directivas de cadena base. El dwFlags miembro de la estructura a la que apunta pPolicyPara se puede establecer para modificar el comportamiento de comprobación de directivas predeterminado.
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 puede establecerse para que apunte a una estructura de AUTHENTICODE_EXTRA_CERT_CHAIN_POLICY_PARA.

El 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 puede establecerse 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 .
CERT_CHAIN_POLICY_SSL
(LPCSTR) 4
Implementa las comprobaciones de comprobación de directivas de cadena de servidor o cliente SSL. El miembro pvExtraPolicyPara de la estructura de datos a la que apunta pPolicyPara puede establecerse 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 servidor y cliente, la llamada a la función CertGetCertificateChain para obtener el contexto de la 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 cadena comprobando 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 dwFlags miembro de la estructura de 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 una 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:

- 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 de comprobación de directivas predeterminado. Para obtener más información, consulte CERT_CHAIN_POLICY_BASE.
- CERT_CHAIN_POLICY_BASIC_CONSTRAINTS: implementa la directiva de cadena de restricciones básicas. La 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.
- Comprueba si el segundo elemento de la cadena, la ENTIDAD de certificación que emitió el certificado final, es una ENTIDAD de certificación 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 Flags valor de la directiva HKEY_LOCAL_MACHINEprotectedRoots subclave, definido por CERT_PROT_ROOT_FLAGS_REGPATH y se produce un error en la comprobación anterior, la cadena se comprueba CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS se establece en dwInfoStatus. Esto se establece si había una restricción de nombre válida para todos los espacios de nombres, incluido 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 de CERT_CHAIN_POLICY_STATUS a la que apunta el parámetro pPolicyStatus se establece en CERT_E_UNTRUSTEDROOT.

El dwFlags miembro 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 dwFlags miembro 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:
Esta directiva identificador de objeto (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 un 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, el cbSize miembro 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 en CERT_CHAIN_POLICY_STATUS estructura a la que apunta el parámetro pPolicyStatus se establecerá en TRUST_E_CERT_SIGNATURE para una posible criptografía débil y se establecerá en CERT_E_UNTRUSTEDROOT para raíces de terceros que no cumplan 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 CERT_CHAIN_POLICY_PARA que proporciona los criterios de comprobación de directivas para la cadena. El dwFlags miembro de esa estructura se puede establecer para cambiar el comportamiento de comprobación de directivas predeterminado.

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 en la cadena. El estado adicional específico del OID se puede devolver en el pvExtraPolicyStatus miembro 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 ha superado.

Si se puede comprobar la cadena para la directiva especificada, se devuelve y se actualiza el miembro dwError del pPolicyStatus de . 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 se TRUE y debe comprobar el parámetro pPolicyStatus para el error real.

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

Observaciones

Un miembro dwError de la estructura de CERT_CHAIN_POLICY_STATUS a la que apunta pPolicyStatus se puede aplicar 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 la cadena, tanto el lChainIndex como los miembros lElementIndex de la estructura de CERT_CHAIN_POLICY_STATUS se establecen en . 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 indexe 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

Requisito Valor
cliente mínimo admitido Windows XP [aplicaciones de escritorio | Aplicaciones para UWP]
servidor mínimo admitido Windows Server 2003 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
encabezado de wincrypt.h
biblioteca de Crypt32.lib
DLL de 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 de

funciones de comprobación de la cadena de certificados