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


Проверка подписи в документе

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

При получении подписанного документа можно проверить допустимость подписи или подписей. Подпись можно проверить на наличие:

  • Допустимость хэша подписи
  • Срок действия сертификата подписывателя

Хэш подписи расшифровывается с помощью открытого ключа подписывателя, найденного в сертификате подписывателя, который входит в состав подписи. Если расшифрованная подпись соответствует новому хэшу исходного документа, подпись была создана владельцем закрытого ключа, связанного с открытым ключом, используемым для расшифровки хэша. Кроме того, документ, на основе которому основана подпись, гарантированно не будет изменен после создания подписи.

Сертификат, который предоставил открытый ключ и удостоверение подписывающего, также можно проверить на допустимость, включая такие вопросы, как отозван сертификат, устарел ли сертификат или сертификат был выдан доверенным издателем сертификата.

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

Примечание

Если подпись не является криптографически допустимой или сертификат подписывающего является недопустимым, возникает исключение, и программа проверки должна обработать исключение. При любой ошибке CAPICOM возвращается отрицательное десятичное значение Err.Number . Дополнительные сведения см. в разделе CAPICOM_ERROR_CODE. Сведения о положительных десятичных значениях Err.Number см. в разделе Winerror.h.

 

Sub VerifySig(ByVal FileToVerify As String, ByVal FileBase As String)
On Error GoTo ErrorHandler

Dim sdContent As String
Dim sdCheck As String
Dim mySD As SignedData
Set mySD = New SignedData

' Open a file and read the signature.
Open FileToVerify For Input As #1
Input #1, sdCheck
Close #1

' Open a file and input the plaintext content that was signed.
Open FileBase For Input As #2
Input #2, sdContent
Close #1

' Set the detached content upon which the signature is based.
mySD.Content = sdContent

' Verify the detached signature.
On Error Resume Next
    mySD.Verify sdCheck, True
If Err.Number <> 0 Then
    MsgBox "Signature verification failed. " & Err.Description
Else
    MsgBox "Verification complete."
End If

' Release the SignedData object.
Set mySD = Nothing

Exit Sub
ErrorHandler:
    If Err.Number > 0 Then
        MsgBox "Visual Basic error found: " & Err.Description
    Else
        MsgBox "CAPICOM error found: " & Hex(Err.Number)
    End If
End Sub