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
L'objet CAPICOM posséde un objet STORE qui contient les différent certicats connus par windows
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Pour chacun de ces emplacements , il existe 4 type de certicats, que le programme charge dans le deuxieme combo
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
La sélection des combos, déclencle le remplissage du listview
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 cboStoreName.AddItem "Personel" cboStoreName.AddItem "Racine" cboStoreName.AddItem "Carnet adresses" cboStoreName.AddItem "Certicate Autority (CA)"
Une fois selectionné dans le listview, on peut afficher le certicat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Ou l'enregister sur disque avec sa clé publique
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oCerticat.Display
Ou avec sa clé privée et sa clé publique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oCertificat.Save App.Path & "\" & App.Title & ".cer", "", CAPICOM_CERTIFICATE_SAVE_AS_CER, CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
Un certicat doit contenir la clé privée pour pouvoir signer un document
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 oCertificat.Save App.Path & "\" & App.Title & ".pfx", "", CAPICOM_CERTIFICATE_SAVE_AS_PFX, CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
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.
PROJET SigCertificats.zip
Partager