Signer numériquement son programme grâce à MakeCert

Page 1 / 1

Pré-requis :

  • Soit : Microsoft Windows SDK for Windows 7 and .NET Framework 4 (Web installer / ISOs)
  • Soit : Visual Studio (en version payante car la version express ne contient pas le programme "makecert")

Tutoriel testé avec :

  • "Microsoft Windows SDK for Windows 7 ..." (gratuit)
  • "Microsoft Visual Studio 2010 Ultimate" (payant mais disponible en version d'évaluation)
  1. Créer votre programme
  2. Lancer l'invite de commandes de Win SDK ou Visual Studio 2010
  3. Création d'une autorité de certification
  4. Ajouter le certificat de notre autorité dans les autorités reconnues du système
  5. Générer un certificat signé par notre autorité de certification
  6. Création du certificat au format "SPC" (Software Publisher's Certificate)
  7. Création du certificat au format PFX grâce au certificat ".spc" et à la clé privée ".pvk"
  8. Signature du programme grâce au certificat au format PFX
  9. Vérifications et aperçus

1. Créer votre programme

Dans notre cas, nous avons créé un programme test avec le langage de programmation "VB .Net" que nous avons l'habitude d'utiliser : Nos programmes.
C'est ce programme que nous signerons dans notre tutoriel.

 

2. Lancer l'invite de commandes de Win SDK ou Visual Studio 2010

Si vous choisissez d'installer "Microsoft Windows SDK ...", il suffit de laisser les options par défaut.
Puis, d'allez dans "menu démarrer -> Microsoft Windows SDK 7.1" et de cliquer sur "Windows SDK 7.1 Command Prompt".

Si vous choisissez d'installer Visual Studio (en version payante), allez dans : "menu démarrer -> Microsoft Visual Studio 2010 -> Visual Studio Tools" et cliquez sur "Invite de commandes de Visual Studio (2010)".

 

3. Création d'une autorité de certification

Pour créer les certificats (celui de l'autorité + les certificats émis par notre autorité), nous utiliseront le programme "makecert".

Par facilité, créez un dossier "cert" sur votre disque dur et déplacez-vous dans ce dossier en tapant :
cd d:\cert
Note : Dans notre cas, nous avons créé un dossier "cert" sur la partition "D".

Pour créer une autorité de certification, vous avez 2 possibilités :
- soit vous avez un serveur sous Windows Server et vous souhaitez installer votre autorité de certification sur ce serveur.
Et ensuite, utiliser cette autorité de certification pour générer vos certificats (que vous devrez générer via makecert).
Pour cela, suivez notre tutoriel : Windows Server 2012 / 2012 R2 - Créer une autorité de certification racine d'entreprise (Root CA).
- soit vous souhaitez créer une autorité de certification sous Windows en utilisant le programme makecert.

Pour créer une autorité de certification via makecert, tapez ceci dans l'invite de commandes que nous avons ouvert :

Batch

makecert -n "CN=InformatiWeb CA" -cy authority -a sha1 -sv "InformatiWeb_CA.pvk" -r "InformatiWeb_CA.cer"

Notes :
- makecert vous demandera de créer le mot de passe de la clé privée puis de le saisir.
- dans notre cas, notre autorité aura le nom "InformatiWeb CA" (CA signifie : Certification Authority).
- si tout se passe bien, le mot "Succeeded" sera affiché dans l'invite de commandes.

Explications :
-n : Spécifie le nom l'autorité de certification que vous créez.
-cy : Spécifie le type de certificat. Dans ce cas-ci : Autorité de certification.
-a : Spécifie l'algorithme de signature. Dans ce cas-ci : sha1
-sv : Spécifie le fichier de clé privée. Dans ce cas-ci, il sera créé et la clé privée sera sauvegardée dans un fichier ".pvk".
-r : Crée un certificat auto-signé. Cette option créera un certificat d'autorité racine (notre autorité ne dépend d'aucune autorité connue).
"Nom du certificat.cer" : Nom du fichier .cer dans lequel le certificat X.509 de l'autorité de certification sera écrit.

 

4. Ajouter le certificat de notre autorité dans les autorités reconnues du système

Pour que vos certificats soient considérés comme valides, vous devez importer le certificat de votre autorité dans la liste des "Autorités de certification racines de confiance" de vos ordinateurs.
Pour cela, référez-vous à notre tutoriel : Importer un certificat (d'une autorité de certification racine) dans les certificats de confiance de Windows.

 

5. Générer un certificat signé par notre autorité de certification

Si vous voulez signer vos certificats avec votre autorité de certification créée sous Windows Server, vous devrez :
- exporter le certificat de votre autorité, au format pfx : Exportation du certificat de l'autorité racine
- extraire le certificat ".cer" et la clé privée ".pvk" depuis le certificat ".pfx", en suivant ceci : OpenSSL - Convertir un certificat .pfx en une clé privée .pvk et un certificat .cer

Maintenant que notre autorité est reconnue comme une autorité de confiance (seulement sur les ordinateurs où vous avez importé le certificat de votre autorité de certification racine dans les autorités de confiance du système), nous allons générer un certificat qui sera émis (signé) par notre autorité.

Pour cela, tapez cette commande :

Batch

makecert -n "CN=InformatiWeb Dev Team" -ic "InformatiWeb_CA.cer" -iv "InformatiWeb_CA.pvk" -a sha1 -sky exchange -pe -sv "InformatiWebDevTeam.pvk" "InformatiWebDevTeam.cer"

Après avoir tapé cette commande, MakeCert vous demandera de créer un mot de passe pour la clé privée du certificat à générer (Subject Key) puis de la saisir..
Une fois que les mots de passe indiqués, il vous demandera le mot de passe de la clé privée de l'autorité de certification (Issuer Signature)

Note : Si tout se passe bien, le mot « Succeeded » sera affiché dans l'invite de commandes.

Explications :
-n : Indique le nom de notre société (ce nom apparaîtra comme éditeur vérifié lorsque vous exécuterez votre programme en tant qu'administrateur)
-ic : Indique le fichier de certificat de l'émetteur (l'émetteur est l'autorité de certification)
-iv : Indique la clé privée de l'émetteur (ou autorité de certification) au format ".pvk".
-a : Spécifie l'algorithme de signature. Dans ce cas-ci : sha1
-sky : Spécifie le type de clé du sujet. Dans ce cas-ci : exchange (qui indique que la clé est utilisée pour le chiffrement à clé et l'échange de clé)
-pe : Marque la clé privée générée comme étant exportable. Cela permet l'inclusion de la clé privée dans le certificat.
-sv : Spécifie le fichier de clé privée .pvk du sujet. Dans ce cas-ci, il sera créé et la clé privée sera sauvegardée dans un fichier .pvk.
"Nom du certificat.cer" : Nom du fichier .cer dans lequel le certificat X.509 sera écrit.

 

6. Création du certificat au format "SPC" (Software Publisher's Certificate)

Pour créer le certificat en ".spc", nous allons utilisez le programme "cert2spc" comme ceci :

Batch

cert2spc InformatiWebDevTeam.cer InformatiWebDevTeam.spc

Si tout se passe bien, le mot "Succeeded" sera affiché dans l'invite de commandes.

 

7. Création du certificat au format PFX grâce au certificat ".spc" et à la clé privée ".pvk"

Etant donné que l'on aura besoin d'un certificat au format "pxf", nous allons générer ce certificat pfx grâce au programme "pvk2pfx" :

Batch

pvk2pfx -pvk "InformatiWebDevTeam.pvk" -spc "InformatiWebDevTeam.spc" -pfx "InformatiWebDevTeam.pfx" -pi pass

Explications :
-pvk : Spécifie le fichier de clé privée .pvk du sujet.
-spc : Spécifie le certificat .spc qui contient le certificat .cer.
-pfx : Nom du fichier .pfx dans lequel le certificat sera créé.
-pi : Spécifie le mot de passe de la clé privée .pvk
Note : -po spécifie le mot de passe du fichier .pfx. Si ce paramètre n'est pas spécifié, le mot de passe utilisé pour le certificat en .pfx sera celui spécifié via le paramètre "-pi".

 

8. Signature du programme grâce au certificat au format PFX

Pour signer notre programme, nous allons utiliser le programme "signtool" comme ceci :

Batch

signtool sign /f "InformatiWebDevTeam.pfx" /p pass "test_app.exe"

Si tout se passe bien, ce message s'affichera dans l'invite de commandes :
Done Adding Additional Store
Successfully signed: le fichier.exe

Explications :
sign : Signe numériquement le fichier. Les signatures numériques protègent le fichier contre la falsification et permettent aux utilisateurs de vérifier le signataire selon un certificat de signature.
/f : Spécifie le certificat de signature (au format .pfx)
"Nom du certificat.pfx" : Certificat à utiliser pour signer le fichier.
/p : Spécifie le mot de passe à utiliser lors de l'ouverture du fichier PFX.
"le fichier.exe" : Fichier à signer numériquement.

 

9. Vérifications et aperçus

Maintenant que votre programme est signé numériquement, un onglet "Signatures numériques" a été ajouté dans les propriétés de votre fichier.

Dans les détails de la signature numérique, vous verrez le nom (InformatiWeb Dev Team dans notre cas) et la ligne "Cette signature numérique est valide".
Si ce n'est pas le cas, assurez vous que :
- vous avez importé le certificat de votre autorité dans la liste des autorités de confiance du système
- vous avez créé votre certificat avec le certificat de votre autorité

En cliquant sur "Afficher le certificat", vous verrez le certificat en lui même.
Vous verrez que le certificat à été délivré par votre autorité de certification et qu'il est conçu pour les rôles suivants :
- Assure que le logiciel provenait d’un éditeur de logiciels
- Protège le logiciel contre toute modification après sa publication

Effectivement, si un pirate essaie de pirater votre programme distribué en version d'évaluation, la signature numérique ne sera plus valide.

Dernière différence : lorsque vous lancerez votre programme en tant qu'administrateur, l'UAC de Windows vous affichera la ligne "Editeur vérifié : InformatiWeb Dev Team" avec un bandeau bleu au lieu de l'orange.