Signieren einer Windows EXE-Datei

180

Ich habe eine EXE- Datei, die ich signieren möchte, damit Windows den Endbenutzer nicht vor einer Anwendung eines "unbekannten Herausgebers" warnt. Ich bin kein Windows-Entwickler. Die betreffende Anwendung ist ein Bildschirmschoner, der aus einer Anwendung generiert wird, die Bildschirmschoneranwendungen generiert. Als solches habe ich keinen Einfluss darauf, wie die Datei generiert wird.

Ich habe bereits herausgefunden, dass ich einen brauchen Codesignatur - Zertifikat von einer CA wie Verisign oder instantssl.com. Was ich nicht verstehe, ist, was ich tun muss (wenn überhaupt möglich), um meine EXE-Datei zu signieren. Was ist eine einfache Erklärung?

Die Antwort von Mel Green brachte mich weiter, aber signtool möchte, dass ich spezifiziere, welches Zertifikat auf jeden Fall verwendet werden soll. Kann ich irgendwie ein kostenloses Code-Signatur-Zertifikat erhalten, um zu testen, ob dies überhaupt für mich funktioniert?

Bitte geben Sie auch an, welche Zertifikatart die richtige ist. Die meisten Websites erwähnen nur "Codesignatur" und sprechen über das Signieren von Anwendungen, die tatsächlich vom Benutzer kompiliert werden. Dies ist bei mir nicht der Fall.

Lasar
quelle
3
Nur neugierig - wie viel muss man bezahlen, um ein Zertifikat zu kaufen?
InTheNameOfScience
2
@ Rigel ungefähr $ 400 pro Jahr, wahrscheinlich nicht wert :)
Sharan Arumugam
@ SharanArumugam: WAS ?????? Es ist, als wäre Microsfot gegen billige / freie Software!
InTheNameOfScience

Antworten:

116

Sie können versuchen, das Microsoft Sign Tool zu verwenden

Sie laden es als Teil des Windows SDK für Windows Server 2008 und .NET 3.5 herunter. Nach dem Herunterladen können Sie es wie folgt über die Befehlszeile verwenden:

signtool sign / a MyFile.exe

Dies signiert eine einzelne ausführbare Datei mit dem "besten verfügbaren Zertifikat". (Wenn Sie kein Zertifikat haben, wird eine SignTool-Fehlermeldung angezeigt.)

Oder Sie können versuchen:

Signtool Signwizard

Dadurch wird ein Assistent gestartet, der Sie durch das Signieren Ihrer Anwendung führt. (Diese Option ist nach Windows SDK 7.0 nicht mehr verfügbar.)


Wenn Sie ein Zertifikat erhalten möchten , mit dem Sie den Prozess des Signierens der ausführbaren Datei testen können, können Sie das .NET-Tool Makecert verwenden .

Tool zum Erstellen von Zertifikaten (Makecert.exe)

Nachdem Sie Ihr eigenes Zertifikat erstellt und es zum Signieren Ihrer ausführbaren Datei verwendet haben, müssen Sie es manuell als vertrauenswürdige Stammzertifizierungsstelle für Ihren Computer hinzufügen, damit die Benutzerkontensteuerung dem Benutzer, der es ausführt , mitteilt, dass es von einer vertrauenswürdigen Quelle stammt. Wichtig . Das Installieren eines Zertifikats als ROOT CA gefährdet die Privatsphäre Ihrer Benutzer. Schau, was mit DELL passiert ist. Weitere Informationen dazu finden Sie sowohl im Code als auch über Windows unter:

Hoffentlich bietet das mehr Informationen für jeden, der dies versucht!

Mel Green
quelle
Ein funktionierender Workflow in einer separaten Frage: stackoverflow.com/questions/84847/…
The_Ghost
4
"Dieses Tool wird automatisch mit Visual Studio installiert. Verwenden Sie zum Ausführen des Tools die Developer-Eingabeaufforderung (oder die Visual Studio-Eingabeaufforderung in Windows 7)." msdn.microsoft.com/en-us/library/8s9b9yaz(v=vs.110).aspx
Westy92
Sehr neugierig auf das Zertifikat, das auch von signtool verwendet wird.
Overdrivr
1
Die Option "signwizard" ist nach Windows SDK 7.0
Omar Reis
Makecert ist veraltet und ein PowerShell-Cmdlet New-SelfSignedCertificate sollte verwendet werden, um stattdessen ein Testzertifikat zu erstellen. Details unter stackoverflow.com/a/51443366/38117911 (Antwort auf eine von The_Ghost verknüpfte Frage).
Alexander Revo
35

Ich hatte das gleiche Szenario in meinem Job und hier sind unsere Ergebnisse

Als erstes müssen Sie das Zertifikat abrufen und auf Ihrem Computer installieren. Sie können entweder eines von einer Zertifizierungsstelle kaufen oder eines mit makecert erstellen .

Hier sind die Vor- und Nachteile der beiden Optionen

Kaufen Sie ein Zertifikat

  • Vorteile
    • Durch die Verwendung eines von einer Zertifizierungsstelle (Certificate Authority) ausgestellten Zertifikats wird sichergestellt, dass Windows den Endbenutzer nicht vor einer Anwendung eines "unbekannten Herausgebers" auf einem Computer warnt, der das Zertifikat der Zertifizierungsstelle verwendet (das Betriebssystem wird normalerweise mit den Stammzertifikaten von Zertifizierungsstellen geliefert) )
  • Nachteile:
    • Das Erhalten eines Zertifikats von einer Zertifizierungsstelle ist mit Kosten verbunden

Generieren Sie ein Zertifikat mit Makecert

  • Vorteile:
    • Die Schritte sind einfach und Sie können das Zertifikat für die Endbenutzer freigeben
  • Nachteile:
    • Endbenutzer müssen das Zertifikat manuell auf ihren Computern installieren. Abhängig von Ihren Clients ist dies möglicherweise keine Option
    • Mit makecert erstellte Zertifikate werden normalerweise für die Entwicklung und das Testen verwendet, nicht für die Produktion

Signieren Sie die ausführbare Datei

Es gibt zwei Möglichkeiten, die gewünschte Datei zu signieren:

  • Verwenden eines auf dem Computer installierten Zertifikats

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

    • In diesem Beispiel verwenden wir ein im Ordner "Personal" gespeichertes Zertifikat mit einem SHA1-Fingerabdruck (dieser Fingerabdruck stammt aus dem Zertifikat), um die Datei unter "C: \ filename.dll" zu signieren.
  • Verwenden einer Zertifikatdatei

    signtool sign / tr http://timestamp.digicert.com / td sha256 / fd sha256 / f "c: \ Pfad \ zu \ mycert.pfx" / p pfxpassword "c: \ Pfad \ zu \ file.exe"

    • In diesem Beispiel verwenden wir das Zertifikat "c: \ path \ to \ mycert.pfx" mit dem Kennwort pfxpassword, um die Datei "c: \ path \ to \ file.exe" zu signieren.

Testen Sie Ihre Unterschrift

Methode 1: Verwenden von signtool

Gehen Sie zu: Start> Typ CMD ausführen> Klicken Sie auf OK. Geben Sie an der Eingabeaufforderung das Verzeichnis ein, in dem signtool vorhanden ist. Führen Sie Folgendes aus:

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

Methode 2: Verwenden von Windows

Klicken Sie mit der rechten Maustaste auf die signierte Datei. Eigenschaften auswählen Wählen Sie die Registerkarte Digitale Signaturen. Die Signatur wird im Abschnitt Signaturliste angezeigt.

Ich hoffe das könnte dir helfen

Quellen:

Erick Castrillo
quelle
Ich bin froh, dass ich @PhilLab helfen kann
Erick Castrillo
Bitte geben Sie auch $$$ Schätzung. Vielen Dank!
InTheNameOfScience
1
@WeGoToMars Ich denke, dieser Artikel kann Ihnen helfen, billigsslsecurity.com/sslproducts/codesigningcertificate.html oder hier digicert.com/code-signing
Erick Castrillo
30

Sie können ein kostenloses, günstiges Code-Signatur-Zertifikat von Certum erhalten, wenn Sie Open Source entwickeln.

Ich verwende ihr Zertifikat seit über einem Jahr und es entfernt die unbekannte Publisher-Nachricht von Windows.

Zum Signieren von Code verwende ich signtool.exe aus einem Skript wie diesem:

signtool.exe sign /t http://timestamp.verisign.com/scripts/timstamp.dll /f "MyCert.pfx" /p MyPassword /d SignedFile.exe SignedFile.exe
Lee Richardson
quelle
3
Es sieht nicht mehr kostenlos aus, immer noch viel billiger, 14 €
hultqvist
1
Du hast recht, es sieht nicht mehr frei aus. Ich habe mich gerade erneuert und nichts bezahlt. Vielleicht bin ich großväterlich. Vielleicht sind ihre internen Prozesse unterbrochen. Ihre Website ist sicher kompliziert.
Lee Richardson
4
Das sind jetzt 25,00 €? ( en.sklep.certum.pl/data-safety/code-signing-certificates/… )
ewerybody
Der Certum Shop gibt an, dass das Open Source-Zertifikat die Microsoft SmartScreen Filter-Nachricht NICHT entfernt.
Markus Laire
17

Das ASP-Magazin ASPects enthält eine detaillierte Beschreibung zum Signieren von Code (Sie müssen Mitglied sein, um den Artikel lesen zu können). Sie können es über http://www.asp-shareware.org/ herunterladen.

Hier ist ein Link zu einer Beschreibung, wie Sie Ihr eigenes Testzertifikat erstellen können .

Das könnte auch interessant sein.

Andreas
quelle
7
Nachtrag vier Jahre später: Comodo wurde Anfang 2012 kompromittiert ( blogs.comodo.com/it-security/data-security/… ), und so lehnen viele Benutzeragenten jetzt Zertifikate mit einer Comodo- Stammbehörde ab
A. Wilson,
8
Ist Comodo Mitte 2013 immer noch eine riskante Wette, und bedeutet dies für "Benutzeragenten", dass Microsoft / Windows mit Sicherheit diejenigen sind, die entscheiden, ob diese berüchtigte "unbekannte Herausgeber" -Nachricht angezeigt wird.
Dan W
Entschuldigung, die expliziten Serviceempfehlungen wurden entfernt, die 1) veraltet und 2) jetzt vom Thema ausgeschlossen sind (weil 1.).
Täuschung
8

Referenz https://steward-fu.github.io/website/driver/wdm/self_sign.htm Hinweis: signtool.exe aus dem Microsoft SDK

1. Zum ersten Mal (um ein privates Zertifikat zu machen)

Makecert -r -pe -ss YourName YourName.cer

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

2.Nachher (um Ihr Zeichen zu Ihrer App hinzuzufügen)

signtool sign / s YourName YourApp.exe

Ethan Kuo
quelle
4

Und noch eine weitere Option: Wenn Sie unter Windows 10 entwickeln, aber Microsoft signtool.exe nicht installiert haben, können Sie Ihre App mit Bash unter Ubuntu unter Windows signieren. Hier ist ein heruntergekommener:

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

Stacey Richards
quelle
osslsigncodeist auch unter verfügbar. cygwinWenn Sie dies also bereits verwenden (wie ich), können Sie sich in Ihrer aktuellen Umgebung anmelden, anstatt zur WSL wechseln zu müssen.
Thoni56
4

Verwenden Sie den folgenden Link, um die EXE-Datei (Setup / Installer) zu signieren (Exe- / Setup-Datei ohne Verwendung des Microsoft-Setup-Signtools signieren).

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

Beispielbefehl java -jar jsign-2.0.jar --keystore keystore.jks "--alias alias --storepass password MyInstaller.exe

Arbeitete für mich :)

user2085962
quelle
3

Dies ist keine direkte Antwort auf die Frage, aber sie ist eng miteinander verbunden (und ich hoffe, sie ist nützlich), da früher oder später ein Programmierer seine Hand in die Brieftasche gesteckt hat:

Also, Preise für EV-Signatur:

1 Jahr $ 350 + ($ 50 versteckte Gebühr)
2 Jahr $ 600
3 Jahr $ 750
[www.ksoftware.net] [3]
eToken wird als USB-Stick gesendet. Kein Leser benötigt.
Sie kaufen tatsächlich bei Comodo (Sectigo)

1 Jahr 350 Euro
3 Jahr 799 Euro
sklep.certum.pl

1 Jahr $ 499 USD
3 Jahr $ 897 USD
sectigo.com

1 Jahr $ 410 insgesamt
2 Jahre $ 760 insgesamt
3 Jahre $ 950 insgesamt
www.globalsign.com

1 Jahr: 600 USD (es waren 104 USD)
3 Jahr :?
www.digicert.com

1 Jahr: $ 700
3 Jahre: lächerlich teuer
[ https://trustcenter.websecurity.symantec.com/]

Weitere Preise finden Sie hier:
https://cheapsslsecurity.com/sslproducts/codesigningcertificate.html


Siehe auch den von Erick Castrillo hinzugefügten Link: cheapsslsecurity.com/sslproducts/codesigningcertificate.html

InTheNameOfScience
quelle