Ich habe eine Anwendung und eine Website vorbereitet, wo der Kunde mehrere Optionen für diese Anwendung festlegen kann, bevor er sie herunterlädt. Die Einstellungen werden im Binärformat am Ende der Datei gespeichert (angehängt), dann wird die bearbeitete Datei an den Endbenutzer gesendet. Das Problem ist, dass die Änderung des "Inhalts" der Datei die Dateisignatur unterbricht - gibt es eine Chance, diese geänderte Datei mit irgendwelchen Befehlszeilenwerkzeugen erneut zu signieren? Ich habe versucht, das SignTool von Microsoft zu verwenden, aber es funktioniert nicht ordnungsgemäß unter Linux.Windows-Anwendung auf Linux-basierten Distributionen signieren
Antwort
Es ist eigentlich quite straight forward zu tun mit Mono
's signool; Der knifflige Teil (der im verknüpften Mozilla-Artikel ausführlicher beschrieben wird) besteht darin, das Zertifikat im richtigen Format von Windows nach Linux zu kopieren.
Das Konvertieren der Windows PFX-Zertifikatsdatei in PVK- und SPC-Dateien muss beim Kopieren des Zertifikats von Windows auf Linux nur einmal durchgeführt werden.
openssl pkcs12 -in authenticode.pfx -nocerts -nodes -out key.pem
openssl rsa -in key.pem -outform PVK -pvk-strong -out authenticode.pvk
openssl pkcs12 -in authenticode.pfx -nokeys -nodes -out cert.pem
openssl crl2pkcs7 -nocrl -certfile cert.pem -outform DER -out authenticode.spc
Eigentlich Unterzeichnung der exe ist geradlinig;
signcode \
-spc authenticode.spc \
-v authenticode.pvk \
-a sha1 -$ commercial \
-n My\ Application \
-i http://www.example.com/ \
-t http://timestamp.verisign.com/scripts/timstamp.dll \
-tr 10 \
MyApp.exe
können Sie versuchen, osslsigncode
eine EXE-Datei zu signieren oder MSI-Datei können Sie jetzt tun:
osslsigncode sign -certs <cert-file> -key <der-key-file> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
oder wenn Sie eine PEM oder PVK Schlüsseldatei mit einem mit Passwort zusammen mit einem PEM-Zertifikat:
osslsigncode sign -certs <cert-file> \
-key <key-file> -pass <key-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
oder wenn Sie einen Zeitstempel als auch hinzufügen möchten:
osslsigncode sign -certs <cert-file> -key <key-file> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-t http://timestamp.verisign.com/scripts/timstamp.dll \
-in yourapp.exe -out yourapp-signed.exe
Sie können ein Zertifikat und den Schlüssel in einer PKCS # 12-Container gespeichert verwenden:
osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
Um sich anzumelden eine CAB-Datei, die Java-Klassendateien enthält:
osslsigncode sign -certs <cert-file> -key <key-file> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-jp low \
-in yourapp.cab -out yourapp-signed.cab
Das ist die Lösung, die für mich funktioniert hat. Das Signcode-Tool hat die Datei nicht signiert (obwohl es die Signierung als erfolgreich gemeldet hat) – treaz
Es wird nützlich sein, um meine Windows-Installer (Wrapping Java-Software), die unter Mageia Linux erstellt wurden, mit NSIS und Ant zu signieren. Vielen Dank :) – gouessej
Ich bin froh, dass ich diese großartige Lösung gefunden habe! Ich wollte eigentlich etwas anderes als Microsoft signtool.exe in Windows verwenden, um meinen Code zu signieren, also habe ich Bash auf Ubuntu unter Windows nach dem Lesen Ihrer Antwort verwendet. Wenn jemand anderes im selben Boot ist, hier ist der Ablauf https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/ –
- 1. Boot-Skripte auf verschiedene Distributionen
- 2. windeployqt.exe unter Linux-Distributionen
- 3. Erstellen neuer Distributionen in scipy
- 4. Builds von iOS-Entwicklern und Distributionen Builds
- 5. PowerShell-Skript auf Nicht-Windows-Plattform signieren?
- 6. Signieren von Daten in ASPX auf Clientseite
- 7. Wie wird mit verschiedenen Verzeichnisordnern auf verschiedenen Linux-Distributionen verfahren?
- 8. Inkonsistenz im Python-Systemattribut "__file__" auf verschiedenen Linux-Distributionen
- 9. Shell-Skript Verhalten über verschiedene Linux-Distributionen
- 10. Digitales Signieren - verteilte Umgebung - separates Hashing und Signieren
- 11. Docker: Mischen von Distributionen - irgendein Nachteil?
- 12. InfoPath-Formulare digital signieren
- 13. Individuelle Distributionen für Gradle Multi-Projekt
- 14. C/JSON-Bibliothek in beliebten Linux-Distributionen?
- 15. MD5 Signieren einer HttpServletResponse
- 16. Signieren einer vorzeichenlosen Assembly
- 17. Mehrere Python-Distributionen - Verwalten von Paketen
- 18. Gibt es kleine Unix- oder BSD-Distributionen?
- 19. Warum verwenden verschiedene Linux-Distributionen unterschiedliche Paketmanager?
- 20. git gpg alles signieren
- 21. PDF mit JavaScript signieren
- 22. Mac OS App signieren?
- 23. Mail signieren und verschlüsseln
- 24. Zertifikat in PKCS # 11 signieren
- 25. Konnte keine Mac App signieren
- 26. C#: Warum eine Baugruppe signieren?
- 27. Signieren von Daten mit SoftHSM
- 28. Digital signieren PDFs mit Zertifikat auf meiner Webseite
- 29. WCF Nur den Körper signieren
- 30. Eine Windows EXE-Datei signieren
Hatten Sie persönliche Erfahrungen mit diesem Tool? Dieser Artikel, auf den du dich beziehst, ist [über 2 Jahre alt] (https://developer.mozilla.org/en-US/docs/Signing_an_executable_with_Authenticode$history), also wäre es sicher, dass es immer noch auf dem neuesten Stand ist . –
@RobW Ich habe ausführbare Dateien unter Verwendung dieses Befehls mit Mono 3.2.5 signiert und es funktioniert gut (in der Tat habe ich gerade getestet). Ich kann die genauen Schritte für das Exportieren des Zertifikats von Windows jetzt nicht testen, da ich nicht auf einem Mac bin, aber ich weiß, dass der angegebene Fluss sehr ähnlich zu dem ist, was ich in letzter Zeit verwendet habe. –
Danke für die Bestätigung! Machen Sie sich keine Sorgen um die Zertifikate, OpenSSL kann alles zu allem konvertieren. –