Signature d’un document
[CAPICOM est un composant 32 bits uniquement disponible pour une utilisation dans les systèmes d’exploitation suivants : Windows Server 2008, Windows Vista et Windows XP. Utilisez plutôt .NET Framework pour implémenter des fonctionnalités de sécurité. Pour plus d’informations, consultez Alternatives à l’utilisation de CAPICOM.]
L’utilisation standard d’une signature consiste à signer un texte et à enregistrer ce texte signé dans un fichier. Le texte signé peut également être envoyé via Internet. Le message signé est au format PKCS #7.
Dans cet exemple, la signature est créée pour le contenu détaché (lorsque le contenu n’est pas inclus avec la signature). Une signature détachée est le plus souvent utilisée si le destinataire de la signature a une copie du texte signé exact. Dans l’exemple ci-dessous, le message d’origine et la signature détachée sont écrits dans des fichiers distincts.
En cas d’erreur CAPICOM, une valeur décimale négative de Err.Number est retournée. Pour plus d’informations, consultez CAPICOM_ERROR_CODE. Pour plus d’informations sur les valeurs décimales positives de Err.Number, consultez Winerror.h.
La création d’une signature utilise la clé privée du signataire. Une signature ne peut être créée que si le certificat du signataire avec une clé privée associée est disponible. Cet exemple de méthode Sign ne spécifie pas de signataire. Si aucun signataire n’est spécifié et qu’aucun certificat dans CAPICOM_MY_STORE n’a de clé privée associée, la méthode Sign échoue. Si un seul certificat dans CAPICOM_MY_STORE a une clé privée associée, ce certificat et sa clé privée sont utilisés pour créer la signature. Si plusieurs certificats du magasin CAPICOM_MY_STORE ont une clé privée associée, une boîte de dialogue s’affiche et l’utilisateur peut choisir le certificat à utiliser pour créer la signature.
Lorsqu’une application web utilise la méthode Sign , une invite s’affiche toujours et l’autorisation de l’utilisateur est requise avant la création d’une signature qui utilise la clé privée de ce signataire.
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
Rubriques connexes