Verificando a assinatura em um documento
[CAPICOM é um componente somente de 32 bits que está disponível para uso nos seguintes sistemas operacionais: Windows Server 2008, Windows Vista e Windows XP. Em vez disso, use o .NET Framework para implementar recursos de segurança. Para obter mais informações, consulte Alternativas ao uso de CAPICOM.]
Quando um documento assinado é recebido, a validade da assinatura ou das assinaturas pode ser verificada. Uma assinatura pode ser verificada para:
- Validade do hash de assinatura
- Validade do certificado do signatário
O hash de assinatura é descriptografado usando a chave pública do signatário encontrado no certificado do signatário, incluído como parte da assinatura. Se a assinatura descriptografada corresponder a um novo hash do documento original, a assinatura foi criada pelo proprietário da chave privada associada à chave pública usada para descriptografar o hash. Além disso, o documento no qual a assinatura se baseia tem a garantia de não ter sido alterado após a criação da assinatura.
O certificado que forneceu a chave pública e a identidade do signatário também pode ser verificado quanto à validade, incluindo problemas como se o certificado foi revogado, se o certificado está desatualizado ou se o certificado foi emitido por um emissor de certificado confiável.
No exemplo a seguir, o conteúdo assinado e o objeto SignedData são lidos de um arquivo e a assinatura e a validade do certificado usado para criar a assinatura são verificadas.
Observação
Se a assinatura não for criptograficamente válida ou o certificado do signatário não for válido, uma exceção será gerada e o programa de verificação deverá tratar a exceção. Em qualquer erro CAPICOM, um valor decimal negativo de Err.Number é retornado. Para obter mais informações, consulte CAPICOM_ERROR_CODE. Para obter informações sobre valores decimais positivos de Err.Number, consulte 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