Cómo realizar la comprobación de CRL con CAPICOM

Resumen

De forma predeterminada, no se realiza la comprobación de la lista de revocación de certificados (CRL) mediante la función Certificate.IsValid o Chain.Build . Sin embargo, puede activar la comprobación de CRL para ambas funciones estableciendo correctamente la propiedad Certificate.IsValid.CheckFlag antes de llamar.

Más información

Dos variantes de comprobación de CRL


Hay dos opciones para la propiedad Certificate.IsValid.CheckFlag que inducen la comprobación de CRL:

CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS
CAPICOM_CHECK_ONLINE_REVOCATION_STATUS
La configuración sin conexión hace que CAPICOM Comprobar CRL locales. Pueden ser intencionadamente descargados por el usuario, o automáticamente en caché. Si no hay ninguna CRL local y en línea comprobación no está activado, se devuelve una constante CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN en Certificate.Status.

La configuración en línea hace que CAPICOM Comprobar CRL locales al igual que en el caso de sin conexión. Sin embargo, si ningún local válida se encuentran las CRL, CAPICOM comprueba el punto de distribución CRL (CDP) aparece en el certificado. Si un CDP no se ha especificado o no se puede resolver, se devuelve una constante CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN en Certificate.Status.

Comprobación de un certificado Individual de CRL



Por ejemplo, considere el siguiente código en el que se crean instancias como válido CAPICOM certificado cert
objeto:

cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT Or _                          CAPICOM_CHECK_TIME_VALIDITY Or _ 
CAPICOM_CHECK_SIGNATURE_VALIDITY Or _
CAPICOM_CHECK_ONLINE_REVOCATION_STATUS

If cert.IsValid.Result Then
'CERTIFICATE IS VALID!
Else
Dim chain As New Chain
chain.Build (cert)

If CAPICOM_TRUST_IS_REVOKED And chain.Status Then
'AT LEAST ONE CERTIFICATE IN THE CHAIN HAS BEEN REVOKED.
End If

If CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN And chain.Status Then
'THE REVOCATION STATUS COULD NOT BE DETERMINED.
End If
End If

Comprobación de certificados en un objeto SignedData de CRL



El método SignedData.Verify no activa la comprobación de CRL incluso cuando CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE está activado. Para realizar la comprobación de los certificados en un SignedData de CRL objeto no es diferente de realizar la comprobación de un certificado individual de CRL. La propiedad Certificate.IsValid.CheckFlag debe establecerse para el certificado de cada firmante. Considere el siguiente código en el que ha sido instanciada sData como un objeto CAPICOM SignedData válido:

Dim cert Dim chain as New Chain 

For i = 1 To sData.Certificates.Count

Set cert = sData.Certificates(i)

cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT Or _
CAPICOM_CHECK_TIME_VALIDITY Or _
CAPICOM_CHECK_SIGNATURE_VALIDITY Or _
CAPICOM_CHECK_ONLINE_REVOCATION_STATUS

If cert.IsValid.Result Then
'CERTIFICATE IS VALID!
Else
chain.Build cert

If CAPICOM_TRUST_IS_REVOKED And chain.Status Then
'AT LEAST ONE CERTIFICATE IN THE CHAIN HAS BEEN REVOKED.
End If

If CAPICOM_TRUST_REVOCATION_STATUS_UNKNOWN And chain.Status Then
'THE REVOCATION STATUS COULD NOT BE DETERMINED.
End If
End If
Next i


La única adición a este código en comparación con el código de ejemplo en la sección "CRL comprobación en un certificado Individual" de este artículo es el bucle a través de todos los certificados en el objeto SignedData .

Referencias

Para obtener información adicional acerca de cómo utilizar CAPICOM, consulte la documentación de Platform SDK.
Propiedades

Id. de artículo: 304298 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios