IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Vos contributions VB6 Discussion :

Etudes sur les signatures numériques


Sujet :

Vos contributions VB6

  1. #1
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut 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 : 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
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonsoir Delbeke,
    Ton étude sur les signatures numériques m'interesse pour la bonne et simple raison que je n'y connais rien. Mais j'ai déjà rencontré quelques petit probème à ce sujet, notament lors de classe où VB m'affichait que cette instance ne pouvait être chargée en mode Public et qu'il le changait en mode privé.
    D'autre fois, sur mes OCX perso, Idem, alors que dans l'IDE je peu les passer en public.
    Je suis peut-être tout a fait à côté de le plaque !
    Dans la même idée, lorque l'ont "Publie" un composant dans VB cela est en rapport ?.
    Dans le cas affirmatif j'étudierais ton exposé plus avant.

    A+

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Bonjour, Delbeke...

    je pense qu'il y as la, matière .. à Article ..


    Je me pose une question quel rapport entre le selfcert.exe fourni par office et celui sur abylonsoft..? font-t'ils la même chose..?

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Citation Envoyé par bbil
    Bonjour, Delbeke...

    je pense qu'il y as la, matière .. à Article ..


    Je me pose une question quel rapport entre le selfcert.exe fourni par office et celui sur abylonsoft..? font-t'ils la même chose..?
    Oui, ils font la même chose, à ma connaisance. Mais tout le monde ne l'a pas forcément , donc je donne un lien pour charger l'equivalent car je n'ai pas trouvé pour le selfcert de microsoft

    Pour ce qui est de faire un article, je ne me sens pas encore vraiement à l'aise avec Capicom, j'en suis encore au stade de la découverte. Ce serait présomptueux de ma part de m'ériger en spécialiste.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  5. #5
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Citation Envoyé par LeForestier
    Bonsoir Delbeke,
    Ton étude sur les signatures numériques m'interesse pour la bonne et simple raison que je n'y connais rien. Mais j'ai déjà rencontré quelques petit probème à ce sujet, notament lors de classe où VB m'affichait que cette instance ne pouvait être chargée en mode Public et qu'il le changait en mode privé.
    D'autre fois, sur mes OCX perso, Idem, alors que dans l'IDE je peu les passer en public.
    Je suis peut-être tout a fait à côté de le plaque !
    Dans la même idée, lorque l'ont "Publie" un composant dans VB cela est en rapport ?.
    Dans le cas affirmatif j'étudierais ton exposé plus avant.

    A+
    Je ne suis pas tres bien sûr de comprendre ton problème.
    Si une classe / ocx est chargé dans le projet d'un exécutable, il faut forcement qu'il soit private. Par contre, si on cherche a créer une dll ou un ocx séparé, à ce momment il faut passer en mode public.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  6. #6
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Je présentes mes excuses à ceux qui ont chargé l'exemple que je fournis (SigCertificats). Dans unb soucis de clarté, j'avais retiré des portions de code qui me semblait pas utile pour illustrer ce que je voulais monter, et j'ai été un peu trop , heu , disons, impulsif.
    J'ai re uploader le projet avec les bouts manquants. Donc si vous n'arrivez pas a compiler le projet, re dowloadez le.

    J'ai commencé également à uploader une deuxieme partie. Mais j'ai manqué de temps pour le laïus explicatif. Ca sera fait ce weekend. Promis. Sachez simplement ppour l'instant qu'il permet de signer et de verifier la signature d'un document, avec la signature stockée dans un fichier externe.


    PROJET SigDetache.zip
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Merci de ta réponse, mais j'étais bien "à côté de la plaque", j'ai toutefois compris le pourquoi de Public/Privé.
    J'ai téléchérger ton ZIP mais... Trop fort pour moi, je n'y connais rien.
    A+

  8. #8
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Etude sur la signature de document, deuxieme partie

    Il existe deux façons d'obtenir un document signé avec CapiCom.
    La première est de laisser le fichier d'origine inchangé et de produire un fichier séparé contenant la signature.
    La seconde est de produire un nouveau fichier contenant à la fois le document et la signature.

    Dans cette seconde partie , nous nous limiterons a la première methode dite Signature Detachée
    Le fichier SigDetache.zip contient deux projets, un pour la signature (SigSignDetache), l'autre pour la vérification (SigVerifDetache)

    SigSignDetache

    Dès le form_load, on charge un certificat contenant une clé privée. la methode choisie est la methode Load de l'objet Certicat de Capicom, qui permet de charger un fichier certificat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oCertificat.Load App.Path & "\" & NomCertificat
    On aurait aussi bien utiliser les mèthodes employées dans le projet GestSignature, vu précédemment.
    Ensuite on demande un fichier à signer à l'utilisateur. Le programme contient une classe cDlgCom que j'utilise régulièrement pour remplacer le composant Common Dialog fourni avec vb.
    Ceci fait, on passe à la signature
    On commence par lire le contenu du fichier dans une variable string : Buffer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      hFich = FreeFile
      strTemp = txtFile
      Open strTemp For Binary As #hFich
        Buffer = String(LOF(hFich), 0)
        Get #hFich, , Buffer
      Close #hFich
    Capicom ne pouvant signer que des tableaux de bytes, on va transformer Buffer. Capicom fourni des outils pour le faire à l'aide de son objet intégré (Utilities)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      ReDim DataToSignBuff(1 To LenB(Buffer))
      DataToSignBuff = oUtils.BinaryStringToByteArray(Buffer)
    Ensuite on va préparer l'objet qui contiendra les donées du signataire (Signer) en remplissant ses propriétés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      oSigner.Certificate = oCertificat 'on utilise le certicat chargé au form_load
      'on definit l'ensemble des certificats constituant la chaine de certificats
      'la chaine de certifats est un ensemble de certificats se certifiants l'un l'autre
      ' quand vous obtenez un certicat commercial, celui-ci est certifié par un certicat emmanant de l'autorité
      'qui vous a fourni le certicat. Le certificat de cette autorité est également certifié
      'auprès une autorité de plus haute instance. Au final, les grands vendeurs se certifient mutuellement)
      oSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_CHAIN_EXCEPT_ROOT 
      'oSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
      'oSigner.Options = CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
    Optionellement, on peut ajuter trois infos à la signature, la date de signature, le nom du fichier et une description. Pour ajouter un attribut, j'ai créé une sub pour éviter de taper trois fois un code quasiment identique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub AddAttribute(oSigner As Signer, AttributType As eAttribute, Value As Variant)
      Dim Attrib As New CAPICOM.Attribute
      Attrib.Name = AttributType
      Attrib.Value = Value
      oSigner.AuthenticatedAttributes.Add Attrib
      Set Attrib = Nothing
    End Sub
    ce qui fait dans le corps pricipal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      AddAttribute oSigner, DateHeure, Now
      AddAttribute oSigner, NomDoc, Mid(strTemp, InStrRev(strTemp, "\") + 1)
      AddAttribute oSigner, Description, "Signé par Delbeke Jean-Luc"
    Ensuite on charge un autre objet que l'on n'a pas encore vu : SignedData, c'est cet objet qui va faire le boulot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      oSignedData.Content = DataToSignBuff
    Maintenant, on signe, la signature sera renvoyé par la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Buffer = oSignedData.Sign(oSigner, True, CAPICOM_ENCODE_BASE64)
    Reste maintenant à mettre buffer en fichier. Le nom du fichier singature sera le nom du fichier d'origine, complété par .Sig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       hFich = FreeFile
        Open strTemp For Binary As #hFich
          Put #1, , Buffer
        Close #hFich
    Voila c'est signé.

    SigVerifDetache

    Avoir un fichier avec sa signature, ne sert à rien si on ne dispose pas de moyen de vérification
    On commence par charger le fichier et le mttre en tableau, tout comme on le faisait por la signature
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     hFich = FreeFile
      Open strTemp For Binary As #hFich
      BufferContent = String(LOF(hFich), 0)
      Get #hFich, , BufferContent
      Close #hFich
      ReDim DataToSignBuff(1 To LenB(BufferContent))
      DataToSignBuff = oUtils.BinaryStringToByteArray(BufferContent)
    On fait la même chose pour le fichier signature
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      strTemp = strTemp & ".sig"
      hFich = FreeFile
      Open strTemp For Binary As #hFich
        Buffer = String(LOF(hFich), 0)
        Get #hFich, , Buffer
      Close #hFich
      ReDim DataSignature(1 To LenB(Buffer))
      DataSignature = oUtils.BinaryStringToByteArray(Buffer)
    On charge l'objet SignedData avec DataToSignBuff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oSignedData.Content = DataToSignBuff
    et lance la verif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      'oSignedData.Verify DataSignature, True, CAPICOM_VERIFY_SIGNATURE_ONLY (que la signature = intégrité du document)
      oSignedData.Verify DataSignature, True, CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE
    S'il ne se produit pas d'erreur c'est que la verif est bonne
    le reste du code affiche le ou la chaine de certicat utilisé pour faire la signature et les différents attributs optionels du documents

    Voila qui conclut mon etude sur la signature detachée.


    PROJET SigDetache.zip
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  9. #9
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut Troisème partie
    Ayant eu pas mal de taf ces derniers temps , j'ai laissé en friche mon étude de capicom

    Je n'ai pas encore eu le temps de faire un laïus, mais j'ai uploadé le troisème volet de ma série. La signature attachée (pas opposition à la signature détachée). On devrait plutot parler de signature embarquée, car un seul fichier est généré cette fois. Un fichier qui comprend à la fois le fichier (crypté) et la signature.

    Si vous prenez la peine de comparer les programmes de SigDetache et De SigAttache, vous n'y trouverez que des différences minimes


    PROJET SigAttache.zip
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

Discussions similaires

  1. Questions générales sur les signatures
    Par buisson dans le forum Général Java
    Réponses: 2
    Dernier message: 17/12/2012, 04h56
  2. Etude sur les ERP, HR ACCESS, SAP HR, PEOPLE SOFT
    Par wissem.ba dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 14/10/2011, 13h04
  3. Etude sur les nombres pseudo-aléatoires
    Par odsen.s dans le forum C
    Réponses: 14
    Dernier message: 21/05/2007, 01h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo