Signature d'un fichier EXE Windows

180

J'ai un fichier EXE que je voudrais signer afin que Windows ne prévienne pas l'utilisateur final d'une application 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 façon dont le fichier est généré.

J'ai déjà découvert que j'aurais besoin d'un certificat de signature de code d'une autorité de certification 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 amené plus loin, mais signtool veut que je spécifie quel certificat utiliser dans tous les cas. Puis-je obtenir un certificat de signature de code gratuit pour tester si cela fonctionnera pour moi?

Veuillez également préciser quel type de certificat est le bon. La plupart des sites ne mentionnent que la «signature de code» et parlent des applications de signature qui sont effectivement compilées par l'utilisateur. Ce n'est pas le cas pour moi.

Lasar
la source
3
Juste curieux - combien faut-il payer pour acheter un certificat?
InTheNameOfScience
2
@Rigel environ 400 $ par an, ça ne vaut probablement pas :)
Sharan Arumugam
@SharanArumugam: QUOI ?????? C'est comme si Microsfot était contre les logiciels bon marché / gratuits!
InTheNameOfScience

Réponses:

116

Vous pouvez essayer d'utiliser l'outil de signature de Microsoft

Vous le téléchargez dans le cadre du SDK Windows pour Windows Server 2008 et .NET 3.5. Une fois téléchargé, vous pouvez l'utiliser à partir de la ligne de commande comme ceci:

signtool signe / a MyFile.exe

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

Ou vous pouvez essayer:

signtool signwizard

Cela lancera un assistant qui vous guidera tout au long de la signature de votre application. (Cette option n'est pas 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 exécutable, vous devrez l'ajouter manuellement en tant qu'autorité de certification racine de confiance pour votre machine afin que l' UAC indique à l'utilisateur qui l'exécute qu'il provient d'une source fiable. Important . L'installation d'un certificat en tant que ROOT CA mettra en danger la confidentialité de vos utilisateurs. Regardez ce qui s'est passé avec DELL. Vous pouvez trouver plus d'informations pour y parvenir à la fois dans le code et via Windows dans:

J'espère que cela fournira des informations supplémentaires pour quiconque tente de le faire!

Mel Green
la source
Un workflow de travail dans une question distincte: stackoverflow.com/questions/84847/…
The_Ghost
4
«Cet outil est automatiquement installé avec Visual Studio. Pour exécuter l'outil, utilisez l'invite de commande du développeur (ou l'invite de commande Visual Studio dans Windows 7).» msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92
Très curieux de connaître le certificat utilisé par signtool aussi.
Overdrivr
1
L'option «signwizard» n'est pas disponible après Windows SDK 7.0
Omar Reis
Makecert est obsolète et une applet de commande PowerShell New-SelfSignedCertificate doit être utilisée pour créer un certificat de test à la place. Détails dans stackoverflow.com/a/51443366/38117911 (réponse à une question liée par The_Ghost).
Alexander Revo le
35

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

La première chose à faire est d' obtenir le certificat et de l'installer sur votre ordinateur, vous pouvez soit en acheter un auprès d'une autorité de certification, soit en générer un à l'aide de makecert .

Voici les avantages et les inconvénients des 2 options

Acheter un certificat

  • Avantages
    • 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 l'autorité de certification (le système d'exploitation est normalement fourni avec les certificats racine de nombreuses autorités de certification). )
  • Les inconvénients:
    • L'obtention d'un certificat auprès d'une autorité de certification entraîne des frais

Générer un certificat avec Makecert

  • Avantages:
    • Les étapes sont simples et vous pouvez partager le certificat avec les utilisateurs finaux
  • Les inconvénients:
    • Les utilisateurs finaux devront installer manuellement le certificat sur leurs machines et en fonction de vos clients, cela peut 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

Signez le fichier exécutable

Il existe deux façons de signer le fichier souhaité:

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

    signtool.exe signe / a / s MY / sha1 sha1_thumbprint_value / t http://timestamp.verisign.com/scripts/timstamp.dll / v "C: \ filename.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: \ filename.dll"
  • Utilisation d'un fichier de certificat

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ chemin \ vers \ moncert.pfx" / p pfxpassword "c: \ chemin \ vers \ fichier.exe"

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

Testez votre signature

Méthode 1: Utilisation de signtool

Allez dans: Démarrer> Exécuter Type CMD> cliquez sur OK À l'invite de commande, entrez le répertoire où se trouve signtool Exécutez ce qui suit:

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

Méthode 2: Utilisation de 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:

Erick Castrillo
la source
Heureux de pouvoir aider @PhilLab
Erick Castrillo
Veuillez également donner une estimation de $$$. Merci!
InTheNameOfScience
1
@WeGoToMars Je pense que cet article peut vous aider à cheappsslsecurity.com/sslproducts/codesigningcertificate.html ou ici digicert.com/code-signing
Erick Castrillo
31

Vous pouvez obtenir un certificat de signature de code gratuit et bon marché auprès de Certum si vous faites du développement open source.

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

En ce qui concerne la signature du 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
Lee Richardson
la source
3
Cela n'a plus l'air gratuit, encore beaucoup moins cher, 14 €
hultqvist
1
Tu as raison, ça n'a plus l'air gratuit. fwiw je viens de renouveler et je n'ai rien payé. Peut-être que j'ai des droits acquis. Peut-être que leurs processus internes sont interrompus. Leur site Web est bien sûr compliqué.
Lee Richardson
4
Cela fait 25,00 € maintenant? ( en.sklep.certum.pl/data-safety/code-signing-certificates/… )
ewerybody
Certum shop dit que leur certificat open source NE supprimera PAS le message du filtre Microsoft SmartScreen.
Markus Laire
17

Le magazine ASPects de l'ASP a une description détaillée sur la façon de 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 de la façon dont vous pouvez créer votre propre certificat de test .

Cela pourrait aussi être intéressant.

Andreas
la source
7
Addendum quatre ans plus tard: Comodo a été compromis début 2012 ( blogs.comodo.com/it-security/data-security/… ) et donc de nombreux agents utilisateurs rejettent désormais les certificats avec une autorité racine Comodo
A. Wilson
8
Est-ce que Comodo est toujours un pari risqué à la mi-2013, et par `` agents utilisateurs '', cela signifie-t-il que Microsoft / Windows est sûrement ceux qui décident de montrer ou non ce message notoire d '"éditeur inconnu".
Dan W
Désolé, nous avons supprimé les recommandations de service explicites, qui sont 1) obsolètes et 2) ont été déclarées hors sujet maintenant (car 1.).
deceze
8

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 certificat privé)

Makecert -r -pe -ss VotreNom VotreNom.cer

certmgr.exe -add YourName.cer -s -r localMachine root

2.Après (pour ajouter votre signe à votre application)

signtool signe / s YourName YourApp.exe

Ethan Kuo
la source
4

Et encore une autre option, si vous développez sur Windows 10 mais que vous n'avez pas installé signtool.exe de Microsoft, vous pouvez utiliser Bash sur 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/

Stacey Richards
la source
osslsigncodeest également disponible sous cygwin, donc si vous l'utilisez déjà (comme je le suis), vous pouvez vous connecter à votre environnement actuel, plutôt que de devoir passer à WSL.
thoni56
4

Utilisez le lien suivant pour signer le fichier .exe (setup / installer) (signer le fichier exe / setup sans utiliser Microsoft setup signtool)

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

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

A travaillé pour moi :)

user2085962
la source
3

Ce n'est pas une réponse directe à la question, mais elle est étroitement liée (et utile j'espère) puisque tôt ou tard un programmeur aura mis la main dans le portefeuille:

Donc, les prix de la signature EV:

1 an 350 $ + (50 $ de frais cachés)
2 ans 600 $
3 ans 750 $
[www.ksoftware.net] [3]
eToken envoyé sous forme de clé USB. Aucun lecteur nécessaire.
Vous achetez en fait chez Comodo (Sectigo)

1 an 350 euros
3 ans 799 euros
sklep.certum.pl

1 an 499 $ USD
3 ans 897 $ USD
sectigo.com

1 an 410 $ au total
2 ans 760 $ au total
3 ans 950 $ au total
www.globalsign.com

1 an: 600 $ (c'était 104 $)
3 ans:?
www.digicert.com

1 an: 700 $
3 ans: ridicule cher
[ https://trustcenter.websecurity.symantec.com/]

Plus de prix ici:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


Voir également le lien ajouté par Erick Castrillo: cheappsslsecurity.com/sslproducts/codesigningcertificate.html

InTheNameOfScience
la source