2013-08-17 10 views
16

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

15

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 
+0

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 . –

+0

@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. –

+0

Danke für die Bestätigung! Machen Sie sich keine Sorgen um die Zertifikate, OpenSSL kann alles zu allem konvertieren. –

15

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 
+0

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

+0

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

+0

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/ –

Verwandte Themen