Поделиться через


Проверка состояния отзыва сертификата

[CAPICOM — это 32-разрядный компонент, доступный для использования в следующих операционных системах: Windows Server 2008, Windows Vista и Windows XP. Вместо этого используйте платформа .NET Framework для реализации функций безопасности. Дополнительные сведения см. в разделе Альтернативы использованию CAPICOM.]

CAPICOM не включает проверку отзыва сертификатов по умолчанию. Однако проверку отзыва сертификата можно включить программным способом для конкретного сертификата с помощью свойства IsValid.CheckFlag объекта Certificate. После установки соответствующего значения CheckFlag при обращении к свойству IsValid.Result объекта Certificate или построении пути проверки сертификата с помощью метода Build объекта Chain принудительно выполняется проверка отзыва.

В следующем примере сертификат был создан как действительный сертификат CAPICOM.

Dim cert As Certificate
Dim LocalStore As New Store

' Open the My store.
LocalStore.Open LocalStore.Open CAPICOM_CURRENT_USER_STORE, _
    CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_WRITE

' Get the first certificate in the My store.
set cert = LocalStore.Certificates.Item(1)

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

Предыдущее относится к отдельному сертификату, независимо от того, как он был получен. Проверка отзыва сертификатов в объекте SignedData ничем не отличается, так как для этой цели нельзя использовать метод Verify объекта SignedData, так как включение CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE не приводит к проверке списка отзыва сертификатов.

Вместо этого необходимо задать CheckFlag для сертификата каждого подписателя. Рассмотрим следующий пример, в котором экземпляр sData был создан в качестве допустимого объекта CAPICOM SignedData .

Dim cert As Certificate
Dim chain As New Chain

' sData is an existing SignedData object.

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
      'THE 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

Дополнительный пример — цикл по всем сертификатам в объекте SignedData .