Signieren eines Dokuments

[CAPICOM ist eine nur 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.]

Eine Standardverwendung einer Signatur besteht darin, einen Text zu signieren und diesen signierten Text in einer Datei zu speichern. Der signierte Text kann auch über das Internet gesendet werden. Die signierte Nachricht hat das PKCS # 7-Format.

In diesem Beispiel wird die Signatur für getrennten Inhalt erstellt (wenn der Inhalt nicht in der Signatur enthalten ist). Eine getrennte Signatur wird am häufigsten verwendet, wenn der Empfänger der Signatur über eine Kopie des genau signierten Texts verfügt. Im folgenden Beispiel werden die ursprüngliche Nachricht und die getrennte Signatur in separate Dateien geschrieben.

Bei einem 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.

Beim Erstellen einer Signatur wird der private Schlüssel des Signaturgebers verwendet. Eine Signatur kann nur erstellt werden, wenn das Zertifikat des Signaturgebers mit einem zugeordneten privaten Schlüssel verfügbar ist. In diesem Beispiel der Sign-Methode wird kein Signer angegeben. Wenn kein Signierer angegeben ist und kein Zertifikat in CAPICOM _ MY _ STORE über einen zugeordneten privaten Schlüssel verfügt, schlägt die Sign-Methode fehl. Wenn einem und nur einem Zertifikat in CAPICOM _ MY _ STORE ein privater Schlüssel zugeordnet ist, werden dieses Zertifikat und sein privater Schlüssel zum Erstellen der Signatur verwendet. Wenn mehr als ein Zertifikat im CAPICOM _ MY _ STORE-Speicher über einen zugeordneten privaten Schlüssel verfügt, wird ein Dialogfeld angezeigt, und der Benutzer kann das Zertifikat auswählen, das zum Erstellen der Signatur verwendet werden soll.

Wenn eine webbasierte Anwendung die Sign-Methode verwendet, wird immer eine Eingabeaufforderung angezeigt, und die Berechtigung des Benutzers ist erforderlich, bevor eine Signatur erstellt wird, die den privaten Schlüssel des Signaturgebers verwendet.

Sub Signfile(ByVal InputFileName As String, _
    ByVal OutputFileName As String)
    
    On Error GoTo ErrorHandler
    Dim c As String
    Dim s As String
    Dim MyStore As New Store
    Dim Signobj As New SignedData
    Dim Signer As New Signer

    ' NOTE: the name 'Attribute' is not a unique name
    ' and must be preceded by 'CAPICOM.'
    Dim SigningTime As New CAPICOM.Attribute

    ' Open the MY store and retrieve the first certificate from the
    ' Store. The signing operation will only work if this
    ' certificate is valid and has access to the signer's private key.
    MyStore.Open CAPICOM_CURRENT_USER_STORE, "MY", _
        CAPICOM_STORE_OPEN_READ_ONLY
    Signer.Certificate = MyStore.Certificates.Item(1)

    ' Open the input file and read the content to be signed from
    ' the file.
    Open App.Path & "\" & InputFileName For Input As #1
    Input #1, c
    Close #1
    
    ' Set the content to be signed.
    Signobj.Content = c

    ' Save the time the data was signed as a signer attribute.
    SigningTime.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME
    SigningTime.Value = Now
    Signer.AuthenticatedAttributes.Add SigningTime

    ' Sign the content using the signer's private key.
    ' The 'True' parameter indicates that the content signed is not
    ' included in the signature string.
    s = Signobj.Sign(Signer, True)

    Open App.Path & "\" & OutputFileName For Output As #2
    Write #2, s
    Close #2

    MsgBox ("Signature done - Saved to file" & OutputFileName)
    Set Signobj = Nothing
    Set MyStore = Nothing
    Set Signer = Nothing
    Set SigningTime = Nothing

    Exit Sub

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

Store. Öffnen

Signer.Certificate

attribute

SignedData