Etudes sur les signatures numériques
Suite à une demande d'un de mes clients, je me suis interressé aux signatures numériques
Après de nombreuses recherches avec mon ami google, j'en suis arrivé à m'intesser à un produit Microsoft CAPICOM SDK qui est libre de droits
Vous pourez le télécharger ici http://www.microsoft.com/downloads/d...displaylang=fr
Note : Chaque programme utilisant CAPICOM devra avoir une référence à CAPICOM V2.1 TYPE LIBRARY
Pour faire mes test j'ai également du me procurer un certificat, comme j'en suis à la phase de test, un certificat commercila ne s'imposait pas. J'ai donc utilisé un certificat dit Self-Cert, c'est à dire créé par soi même. Pour créer ce certificat, j'ai utilisé un programme freeware Abylon SELFCERT 6.5 quer vous pouvez télécharger ici http://www.abylonsoft.com (il faudra chercher un peu dans la section download)
Mes travaux sur CAPICOM ne sont pas complets, je n'ai pas encore mis toutes ses possiblités en jeu, car je ne m'interesse actuellement qu'aux signatures numériques de documents
Pour commencer cette étude, interressons nous d'abord aux certificats.
Vous pouvez voir les certicatats dans l'explorateur internet, Outils/Options Internet/Contenu , et pour finir le bouton Certificats
Vous pouvez voir les différents types à l'aide des onglets.
Charger le projet GestSignatures
En début de programme on initialise trois objets dont nou verrons la signification plus tard
Code:
1 2 3 4
|
Public oMagasin As New CAPICOM.Store 'magasin de certicats
Public oCertificats As CAPICOM.Certificates 'collection de certicat il ne peux etre créé
Public oCertificat As New CAPICOM.Certificate 'un certicat |
L'objet CAPICOM posséde un objet STORE qui contient les différent certicats connus par windows
Il existe 5 emplacements pour les magasins.
lors du form_load, le programme charge ces cinq emplacements dans le premier combobox (cboStoreLocation) lors du formload
Code:
1 2 3 4 5 6 7 8 9 10 11
|
cboStoreLocation.AddItem "CURRENT_USER_STORE"
cboStoreLocation.ItemData(cboStoreLocation.NewIndex) = CAPICOM_CURRENT_USER_STORE 'memorise le numéro d'emplacement
cboStoreLocation.AddItem "LOCAL_MACHINE_STORE"
cboStoreLocation.ItemData(cboStoreLocation.NewIndex) = CAPICOM_LOCAL_MACHINE_STORE
cboStoreLocation.AddItem "ACTIVE_DIRECTORY_USER_STORE"
cboStoreLocation.ItemData(cboStoreLocation.NewIndex) = CAPICOM_ACTIVE_DIRECTORY_USER_STORE
cboStoreLocation.AddItem "SMART_CARD_USER_STORE"
cboStoreLocation.ItemData(cboStoreLocation.NewIndex) = CAPICOM_SMART_CARD_USER_STORE
cboStoreLocation.AddItem "MEMORY_STORE"
cboStoreLocation.ItemData(cboStoreLocation.NewIndex) = CAPICOM_MEMORY_STORE |
Pour chacun de ces emplacements , il existe 4 type de certicats, que le programme charge dans le deuxieme combo
Code:
1 2 3 4 5
|
cboStoreName.AddItem "Personel"
cboStoreName.AddItem "Racine"
cboStoreName.AddItem "Carnet adresses"
cboStoreName.AddItem "Certicate Autority (CA)" |
La sélection des combos, déclencle le remplissage du listview
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
Private Sub RemplisListe()
Dim Cert As CAPICOM.Certificate 'pour boucle for each/next
Dim Li As ListItem 'un élement du listview
lstFoundCerts.ListItems.Clear 'effacement du listview
'quelque sécurités
If cboStoreLocation.ListIndex < 0 Then
MsgBox "Veuillez sélectionner un emplacement", vbInformation
Exit Sub
End If
If cboStoreName.ListIndex < 0 Then
MsgBox "Veillez sélectionner un type de oMagasin", vbInformation
Exit Sub
End If
'certain magasins peuvnt ne pas être la, comme le smart card par exemple
On Error Resume Next
'on ouvre le magasin
oMagasin.Open cboStoreLocation.ItemData(cboStoreLocation.ListIndex), _
GetStoreName(cboStoreName.ListIndex)
If Err Then Exit Sub
On Error GoTo 0
'on recupere la collection de certicats du magasin
Set oCertificats = oMagasin.Certificates
For Each Cert In oCertificats
'on ajoute ce certicat dans le listview
Set Li = lstFoundCerts.ListItems.Add(, , Cert.GetInfo(CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME))
Set Li.Tag = Cert 'astuce ! la proprété tag contiendra le certicat
Li.ListSubItems.Add , , Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME)
Li.ListSubItems.Add , , Cert.ValidFromDate
Li.ListSubItems.Add , , Cert.ValidToDate
If Cert.HasPrivateKey = True Then
Li.ListSubItems.Add , , "Oui"
Else
Li.ListSubItems.Add , , "Non"
End If
Next Cert
End Sub |
Une fois selectionné dans le listview, on peut afficher le certicat
Ou l'enregister sur disque avec sa clé publique
Code:
1 2
|
oCertificat.Save App.Path & "\" & App.Title & ".cer", "", CAPICOM_CERTIFICATE_SAVE_AS_CER, CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN |
Ou avec sa clé privée et sa clé publique.
Code:
1 2
|
oCertificat.Save App.Path & "\" & App.Title & ".pfx", "", CAPICOM_CERTIFICATE_SAVE_AS_PFX, CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN |
Un certicat doit contenir la clé privée pour pouvoir signer un document
Note:
Un certicat enregistré sur disque, pourra être rechargé avec un oCerticat.Load NomDuFichierCertificat
Voila qui termine ma premiere partie sur les signature numériques.
Je continue à travailler sur le composant capicom, et vous ferais part de ce que j'arrive à faire avec.
http://www.developpez.net/forums/images/attach/zip.gif PROJET SigCertificats.zip