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 : 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
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 : 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
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
 
  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 : 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
Une fois selectionné dans le listview, on peut afficher le certicat
Ou l'enregister sur disque avec 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
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 & ".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.


PROJET SigCertificats.zip