Überprüfen der Signatur für ein Dokument

[CAPICOM ist eine 32-Bit-Komponente, die für die Verwendung 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 oder der Signaturen überprüft werden. Eine Signatur kann auf:

  • Gültigkeit des Signaturhashs
  • Gültigkeit des Zertifikats des Signers

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

Das Zertifikat, das den öffentlichen Schlüssel und die Identität des Signers bereitgestellt hat, kann auch auf Gültigkeit überprüft werden. Dazu gehört beispielsweise, 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 ungültig ist oder das Zertifikat des Signaturers ungültig ist, wird eine Ausnahme ausgelöst, und das Überprüfungsprogramm muss die Ausnahme behandeln. Bei jedem CAPICOM-Fehler wird der negative Dezimalwert 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