Freigeben über


Überprüfen der Signatur auf einem Dokument

[CAPICOM ist eine 32-Bit-Komponente, die in den folgenden Betriebssystemen verfügbar ist: Windows Server 2008, Windows Vista und Windows XP. Verwenden Sie stattdessen die .NET Framework, um Sicherheitsfeatures zu implementieren. Weitere Informationen finden Sie unter Alternativen zur Verwendung von CAPICOM.]

Wenn ein signiertes Dokument empfangen wird, kann die Gültigkeit der Signatur bzw. der Signaturen überprüft werden. Eine Signatur kann auf Folgendes überprüft werden:

  • Gültigkeit des Signaturhashs
  • Gültigkeit des Zertifikats des Unterzeichners

Der Signaturhash wird mithilfe des öffentlichen Schlüssels des Signaturgebers entschlüsselt, der im Zertifikat des Signaturgebers enthalten ist. Wenn die entschlüsselte Signatur mit einem neuen Hash des ursprünglichen Dokuments übereinstimmt, wurde die Signatur vom Besitzer des privaten Schlüssels erstellt, der dem öffentlichen Schlüssel zugeordnet ist, der zum Entschlüsseln des Hashs verwendet wurde. Darüber hinaus wurde das Dokument, auf dem die Signatur basiert, garantiert nicht geändert, nachdem die Signatur erstellt wurde.

Das Zertifikat, das den öffentlichen Schlüssel und die Identität des Signierers bereitgestellt hat, kann auch auf Gültigkeit überprüft werden, z. B. ob das Zertifikat widerrufen wurde, ob das Zertifikat veraltet ist oder ob das Zertifikat von einem vertrauenswürdigen Zertifikataussteller ausgestellt wurde.

Im folgenden Beispiel werden der signierte Inhalt und das SignedData-Objekt aus einer Datei eingelesen, und die Signatur und die Gültigkeit des Zertifikats, das zum Erstellen der Signatur verwendet wird, werden überprüft.

Hinweis

Wenn die Signatur kryptografisch nicht gültig ist oder das Zertifikat des Signaturgebers ungültig ist, wird eine Ausnahme ausgelöst, und das überprüfende Programm muss die Ausnahme behandeln. Bei jedem CAPICOM-Fehler wird ein negativer Dezimalwert von Err.Number zurückgegeben. Weitere Informationen finden Sie unter CAPICOM_ERROR_CODE. Informationen zu positiven Dezimalwerten von Err.Number finden Sie unter 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