Comment signer des applications avec Microsoft Windows SDK

Ce guide vous montrera comment utiliser votre certificat de signature de code avec Microsoft SignTool. Ces instructions supposent que vous avez installé Windows SDK et SignTool (SignTool est inclus avec SDK Windows) et que vous disposez d'un certificat Code signing valide au format pfx. Pour obtenir et installer le SDK Windows, utilisez le lien de téléchargement : Windows Software Development Kit (SDK) for Windows 10.

Fichier PFX

Un fichier .pfx est nécessaire pour la signature de code. Ce fichier pfx peut être également utilisé pour l'importation du certificat au magasin des certificats (nous vous recommandons de ne pas autoriser l'export de la clé privée lors de l'importation). Si vous utilisez un certificat stocké dans le magasin des certificats, il est recommandé d'enregistrer sa sauvegarde au format PFX.

Pour créer un fichier PFX, vous avez 3 possibilités

    1. Vous pouvez utiliser IIS (qui fait partie de Windows) : générez une requête CSR en cliquant sur l'option "Créer une demande de certificat". Après l'émission du certificat, terminez la demande et exportez le fichier .pfx.
    2. Vous pouvez créer des clés dans OpenSSL et ensuite générer le fichier .pfx dans la même application. OpenSSL fait partie de toutes les versions Linux, mais il est également possible de l'utiliser sous Windows sous la forme de GnuWin ou Win32OpenSSL. Dans ce cas, utilisez les commandes suivantes : openssl genrsa -out cle-privee.key 2048 openssl req -new -key cle-privee.key -out nom.csr

      Insérez la demande CSR dans la commande de certificat. Après l'émission du certificat, créez le fichier PFX en utilisant la clé privée, le certificat et le certificat CA.

      Avant de créer un fichier PFX, vous devez convertir le fichier P7B et les certificats CA au format texte. Afin d'assurer la fiabilité de la signature, intégrez également les certificats CA au fichier .pfx !

      openssl pkcs7 -print_certs -in windows_intermediate.p7b -out CAcert.cer

      Ensuite, dans OpenSSL, fusionnez tout dans un fichier PFX.

      openssl pkcs12 -export -in cert.crt -certfile CAcert.cer -inkey key.pem -out fichier.pfx
    3. La troisième possibilité est un programme graphique. Son utilisation est simple - le programme vous permet de créer votre demande CSR et la clé privée. Ensuite vous pouvez importer le certificat et exporter les clés vers un fichier PFX.

Utiliser Signtool

Signtool.exe est un programme qui vous permet de signer des applications avec un certificat Code Signing au format de fichier .pfx. Après l'installation de SignTool, vous pouvez commencer à l'utiliser via la ligne de commande.

Le certificat doit être stocké dans un fichier sur votre ordinateur (il n'est installé nulle part). Signtool est un outil de ligne de commande, alors vous allez signer en utilisant des commandes simples.

Signer avec signtool.exe
Signer avec signtool.exe

Voici une liste des commandes de base :

signtool commande/paramètre

Sign - Signer numériquement les fichiers. Verify - Vérifie la signature numérique en déterminant si le certificat de signature a été émis par une autorité de confiance. Timestamp - Fichiers d'horodatage. L'horodatage peut être inséré également lors de la signature du code.

Paramètres :

  • /f SignCertFile – Spécifie l'emplacement du fichier .pfx
  • /fd – Spécifie l'algorithme hash de la signature. L'algorithme par défaut est SHA1, mais SHA256 est recommandé, c'est à dire /fd SHA256.
  • /p Password – Spécifie le mot de passe à utiliser lors de l'ouverture d'un fichier PFX.
  • /s StoreName – Spécifie le magasin de certificats à ouvrir lors de la recherche du certificat. Le magasin par défaut est My Store.
  • /t URL – Spécifie l'URL du serveur d'horodatage. URL timestamp des serveurs se trouve ci-dessous.

Retrouvez la documentation complète sur le web du Microsoft ou en entrant la commande „signtool sign /?“.

La commande suivante signe numériquement et horodate un fichier. Le certificat utilisé pour signer le fichier est stocké dans un fichier PFX :

SignTool sign /f MyCert.pfx /t http://timestamp.digicert.com C:test.exe

Nous vous recommandons d'utiliser toujours timestamp (horodatage). Il garantit la fiabilité de l'application signée même après l'expiration du certificat. Ceci est très important, car vous n'aurez pas à signer à nouveau les anciennes applications (après l'expiration du certificat de signature de code). Si vous utilisez l'horodatage au moment de la signature, elle sera valide à l'avenir.

Il y a plusieurs serveurs d'horodatage, nous vous recommandons le serveur timestamp de DigiCert : http://timestamp.digicert.com/

Ce serveur n'a aucun site web sur le port 80, il est donc inutile d'utiliser un navigateur (vous ne verrez rien).

Magasin de certificats

Un certificat peut être stocké à plusieurs endroits et vous pouvez "l'appeler" de plusieurs manières. La manière la plus courante est d'enregistrer le certificat au format .pfx sur votre ordinateur puis de référencer ce fichier. Ce principe est pratique, mais pas sécurisé du tout. N'importe qui peut voler ce fichier PFX, et même s'il est protégé par un mot de passe, il s'agit d'un gros risque de sécurité (les mots de passe sont souvent très faibles). Un fichier .pfx permet avant tout de faire une sauvegarde du fichier de certificat. Un exemple de signature avec un fichier PFX est donné ci-dessus.

La deuxième méthode consiste à stocker le certificat dans le magasin de certificats et ensuite effectuer un appel selon le sujet du certificat. Et si vous désactivez l'exportation de la clé privée du certificat, l'opération sera plus sécurisée. Sans clé privée, le certificat est inutile et il n'est pas possible de l'exporter depuis le système. Une signature utilisant le référentiel nécessite le paramètre /n:

signtool sign /n "My Company Certificate" /t http://timestamp.digicert.com C:test.exe

La troisième méthode consiste à stocker le certificat sur un token USB. Ce token est capable de stocker des certificats de façon très sécurisé. Un token est utilisé pour des certificats de signature de code EV, et nous le recommandons fortement. Votre certificat est en sécurité. Il n'est pas possible d'exporter le certificat depuis le token, et si vous saisissez plusieurs fois le mauvais mot de passe, le certificat sera définitivement supprimé du token. Tous les avantages des certificats de signature de code EV sont décrits ici. Pour signer avec un certificat stocké sur un token, utilisez le paramètre /s my:

signtool sign /s my /t http://timestamp.digicert.com C:test.exe

Vérification de la signature

Vous savez maintenant comment signer une application. Mais vous aimeriez peut-être savoir comment vérifier les signatures des fichiers.
Pour vérifier une signature avec signtool :

signtool verify C:pracetest.exe

Vous pouvez vérifier une signature très simplement en affichant les propriétés du fichier dans l'Explorateur de fichiers Windows et en cliquant sur Détails.

Détails de la signature dans l'Explorateur de fichiers Windows
Détails de la signature dans l'Explorateur de fichiers Windows