Проверка подписи в документе
[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