次の方法で共有


ドキュメントに署名する

[CAPICOM は、Windows Server 2008、Windows Vista、および Windows XP のオペレーティング システムで使用できる 32 ビットのみのコンポーネントです。 代わりに、.NET Frameworkを使用してセキュリティ機能を実装します。 詳細については、「 CAPICOM の使用に代わる方法」を参照してください。

署名の標準的な用途は、テキストに署名し、その署名されたテキストをファイルに保存することです。 署名されたテキストは、インターネット経由で送信することもできます。 署名されたメッセージは PKCS #7 形式です。

この例では、デタッチされたコンテンツに対して署名が作成されます (コンテンツが署名に含まれていない場合)。 署名の受信者が署名された正確なテキストのコピーを持っている場合は、デタッチされた署名が最も頻繁に使用されます。 次の例では、元のメッセージとデタッチされた署名が別々のファイルに書き込まれます。

CAPICOM エラーでは、 Err.Number の負の 10 進値が返されます。 詳細については、「 CAPICOM_ERROR_CODE」を参照してください。 Err.Number の正の 10 進数の値については、「Winerror.h」を参照してください。

署名を作成するには、署名者の 秘密キーを使用します。 署名は、署名者の証明書と関連付けられた秘密キーが使用可能な場合にのみ作成できます。 この Sign メソッドの例では、署名者は指定しません。 署名者が指定されておらず、 CAPICOM_MY_STORE の証明書に秘密キーが関連付けられていない場合、 Sign メソッドは失敗します。 CAPICOM_MY_STOREの 1 つだけの証明書に秘密キーが関連付けられている場合、その証明書とその秘密キーを使用して署名が作成されます。 CAPICOM_MY_STORE ストア内の複数の証明書に秘密キーが関連付けられている場合は、ダイアログ ボックスが表示され、ユーザーは署名の作成に使用する証明書を選択できます。

Web ベースのアプリケーションで Sign メソッドを使用する場合は、常にプロンプトが表示され、署名者の秘密キーを使用する署名が作成される前にユーザーのアクセス許可が必要になります。

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.Open

Signer.Certificate

属性

SignedData