web-dev-qa-db-fra.com

Signature d'un fichier Windows EXE

J'ai un fichier EXE que je voudrais signer pour que Windows ne prévienne pas l'utilisateur final d'une application provenant d'un "éditeur inconnu". Je ne suis pas un développeur Windows. L'application en question est un économiseur d'écran généré à partir d'une application qui génère des applications d'économiseur d'écran. En tant que tel, je n’ai aucune influence sur la manière dont le fichier est généré.

J'ai déjà découvert qu'il me faudrait un signature de code certificat d'un CA comme Verisign ou instantssl.com. Ce que je ne comprends pas, c’est ce que je dois faire (si possible) pour signer mon fichier EXE. Qu'est-ce qu'une explication simple?

La réponse de Mel Green m'a pris plus loin, mais signtool veut que je spécifie quel certificat utiliser dans tous les cas. Puis-je obtenir gratuitement un certificat de signature de code pour vérifier si cela fonctionnera pour moi?

Veuillez également spécifier quel type de certificat est le bon. La plupart des sites mentionnent uniquement la "signature de code" et parlent de la signature des applications réellement compilées par l'utilisateur. Ce n'est pas le cas pour moi.

150
Lasar

Vous pouvez essayer d'utiliser Microsoft's Sign Tool

Vous le téléchargez dans le cadre du Kit de développement logiciel (SDK) Windows pour Windows Server 2008 et .NET 3.5. Une fois téléchargé, vous pouvez l'utiliser depuis la ligne de commande comme ceci:

signtool sign/un fichier MyFile.exe

Cela signe un seul exécutable, en utilisant le "meilleur certificat" disponible. (Si vous n'avez pas de certificat, un message d'erreur SignTool s'affichera.)

Ou vous pouvez essayer:

signtool

Cela lancera un assistant qui vous guidera tout au long de la signature de votre application. (Cette option n'est plus disponible après Windows SDK 7.0.)


Si vous souhaitez obtenir un certificat que vous pouvez utiliser pour tester votre processus de signature de l'exécutable, vous pouvez utiliser l'outil .NET Makecert.

Outil de création de certificat (Makecert.exe)

Une fois que vous avez créé votre propre certificat et que vous l’avez utilisé pour signer votre fichier exécutable, vous devez l’ajouter manuellement en tant qu’autorité de certification racine approuvée pour votre ordinateur afin: UAC pour indiquer à l'utilisateur qui l'exécute qu'il provient d'une source fiable. Important . L'installation d'un certificat en tant qu'autorité fondamentale CA mettra en péril la confidentialité de vos utilisateurs. Découvrez ce qui s'est passé avec Dell. Vous pouvez trouver plus d'informations à ce sujet dans le code et via Windows dans:

Espérons que cela fournisse quelques informations supplémentaires à quiconque tentera de le faire!

103
Mel Green

Vous pouvez obtenir un libre certificat de signature de code bon marché de Certum si vous faites du développement open source.

J'utilise leur certificat depuis plus d'un an et cela élimine le message de l'éditeur inconnu de Windows.

En ce qui concerne la signature de code, j'utilise signtool.exe à partir d'un script comme celui-ci:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
25
Lee Richardson

ASPects, le magazine de l'ASP, contient une description détaillée de la procédure à suivre pour signer le code (vous devez être membre pour lire l'article). Vous pouvez le télécharger via http://www.asp-shareware.org/

Voici un lien vers une description comment vous pouvez faire votre propre certificat de test .

This pourrait aussi être intéressant.

17
Andreas

J'ai eu le même scénario dans mon travail et voici nos conclusions

La première chose à faire est d’obtenir le certificat et de l’installer sur votre ordinateur. Vous pouvez en acheter un auprès d’un Autorité de certification ou en générer une en utilisant makecert .

Voici le pour et le contre des 2 options

Acheter un certificat

  • Pros
    • L'utilisation d'un certificat émis par une autorité de certification (autorité de certification) garantira que Windows ne préviendra pas l'utilisateur final d'une application d'un "éditeur inconnu" sur un ordinateur utilisant le certificat de cette autorité (le système d'exploitation est normalement fourni avec les certificats racine de nombreuses autorités de certification). )
  • Inconvénients:
    • Obtenir un certificat d'un CA entraîne des coûts

Générez un certificat en utilisant Makecert

  • Avantages:
    • Les étapes sont faciles et vous pouvez partager le certificat avec les utilisateurs finaux
  • Les inconvénients:
    • Les utilisateurs finaux devront installer manuellement le certificat sur leurs ordinateurs et, en fonction de vos clients, cela pourrait ne pas être une option.
    • Les certificats générés avec makecert sont normalement utilisés pour le développement et les tests, pas pour la production.

Signer le fichier exécutable

Il y a deux façons de signer le fichier que vous voulez:

  • Utilisation d'un certificat installé sur l'ordinateur

    signtool.exe signer/a/s MY/sha1 sha1_thumbprint_value/t http://timestamp.verisign.com/scripts/timstamp.dll /v "C:\nom_fichier.dll"

    • Dans cet exemple, nous utilisons un certificat stocké dans le dossier personnel avec une empreinte numérique SHA1 (cette empreinte numérique provient du certificat) pour signer le fichier situé dans "C:\nom de fichier.dll".
  • Utiliser un fichier de certificat

    signtool sign/tr http://timestamp.digicert.com /td sha256/fd sha256/f "c:\chemin\vers\mycert.pfx"/p pfxpassword "c:\path\to\file.exe "

    • Dans cet exemple, nous utilisons le certificat "c:\chemin\to\mycert.pfx" avec le mot de passe pfxpassword pour signer le fichier "c:\chemin\to\fichier.exe"

Testez votre signature

Méthode 1: Utilisation de signtool

Allez à: Démarrer> Exécuter, tapez CMD> cliquez sur OK. À l'invite de commande, entrez le répertoire dans lequel se trouve signtool. Exécutez les opérations suivantes:

signtool.exe verify/pa/v "C:\filename.dll"

Méthode 2: Utiliser Windows

Cliquez avec le bouton droit sur le fichier signé. Sélectionnez Propriétés. Sélectionnez l’onglet Signatures numériques. La signature sera affichée dans la section Liste des signatures.

J'espère que cela pourrait vous aider

Sources:

17
Erick Castrillo

Une autre option, si vous devez signer le fichier exécutable sur une machine Linux, consiste à utiliser le code de signe à partir de outils de projet Mono . C'est supporté sur Ubunt .

10
mozey

Référence https://steward-fu.github.io/website/driver/wdm/self_sign.htm Remarque: signtool.exe de Microsoft SDK

1. première fois (pour faire un cert privé)

Makecert -r -pe -ss YourName YourName.cer

certmgr.exe -add YourName.cer -s -r racineMachine locale

2.After (pour ajouter votre signe à votre application)

signtool signe/s YourName YourApp.exe

4
Ethan Kuo

Et encore une autre option, si vous développez sous Windows 10 mais que le logiciel signtool.exe de Microsoft n’est pas installé, vous pouvez utiliser Bash sous Ubuntu sous Windows pour signer votre application. Voici un aperçu:

https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/

3
Stacey Richards

Utilisez le lien suivant pour signer le fichier .exe (setup/installer) (signez le fichier exe/setup sans utiliser le programme d'installation de Microsoft)

https://ebourg.github.io/jsign/#files

exemple de commande Java -jar jsign-2.0.jar --keystore keystore.jks "--alias alias --storepass password MyInstaller.exe

Travaillé pour moi :)

2
user2085962