Ho preparato un'applicazione e un sito Web in cui il cliente può impostare diverse opzioni per questa applicazione prima di scaricarla. Le impostazioni sono archiviate in formato binario alla fine del file (aggiunto), quindi il file modificato viene inviato all'utente finale. Il problema è che la modifica dei "contenuti" del file interromperà la firma del file: esiste la possibilità di firmare nuovamente questo file modificato con qualsiasi strumento della riga di comando? Ho provato a utilizzare il SignTool di Microsoft, ma non funziona correttamente su Linux.Firma un'applicazione Windows su distribuzioni basate su Linux
risposta
In realtà è quite straight forward da utilizzare con il segnaposto di Mono
; la parte difficile (descritta in modo più dettagliato nell'articolo di Mozilla collegato) sta copiando il certificato nel formato corretto da Windows a Linux.
Conversione del file di certificato PFX di Windows in file PVK e SPC, è necessario eseguire una sola volta quando si copia il certificato da Windows a Linux;
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
In realtà la firma dell'exe è diretta;
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
Si può provare osslsigncode
a firmare un file EXE o file MSI ora si può fare:
osslsigncode sign -certs <cert-file> -key <der-key-file> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
o se si utilizza un PEM o file di chiave PVK con un password insieme con un certificato PEM:
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
o se si desidera aggiungere un timestamp così:
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
È possibile utilizzare un certificato e una chiave memorizzata in un file PKCS # 12 contenitore:
osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
Per firmare un file CAB contenente file di classe java:
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
Questa è la soluzione che ha funzionato per me. Lo strumento signcode non ha firmato il file (anche se ha segnalato che la firma è andata a buon fine) – treaz
Sarà utile per firmare i miei programmi di installazione di Windows (avvolgimento di software Java) creati con Mageia Linux con NSIS e Ant. Grazie mille :) – gouessej
Sono contento di aver trovato questa grande soluzione! In realtà volevo usare qualcos'altro che il file signtool.exe di Microsoft in Windows per firmare il mio codice, quindi ho usato Bash su Ubuntu su Windows dopo aver letto la tua risposta. Se qualcun altro si trova sulla stessa barca, ecco il resoconto https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/ –
- 1. windeployqt.exe su Linux Distribuzioni
- 2. compilazione su windows e linux
- 3. Firma il programma di installazione NSIS su Linux box
- 4. compatibilità binaria tra le distribuzioni Linux
- 5. Creazione di C++ su Windows e Linux
- 6. malloc_size alternativa su Linux e Windows
- 7. Sviluppo di applicazioni Windows su Linux?
- 8. DLL di Windows su Linux System
- 9. Edificio Qt 5 su Linux, per Windows
- 10. Debug su Linux per Windows Developer
- 11. Discussioni/Confronto dei processi su Linux/Windows
- 12. Sviluppo Android su Windows o Linux?
- 13. UDP in C# funziona su Windows ma non su Linux
- 14. sviluppo wordpress su linux e distribuzione su server windows
- 15. Migrazione da VisualSVN su Windows a svn basato su Linux
- 16. os.Process.Wait() dopo os.FindProcess (pid) funziona su Windows non su linux
- 17. Compilare C# + WPF su Linux per funzionare su Windows
- 18. php: sessioni basate su cookie
- 19. Distribuire librerie basate su F #
- 20. Autorizzazioni Apache basate su querystring
- 21. Implementazioni coda basate su FIFO?
- 22. C/JSON Library nelle diffuse distribuzioni Linux?
- 23. Come gestire una diversa posizione del file di intestazione su diverse distribuzioni Linux?
- 24. su Linux
- 25. tchar.h su linux
- 26. Programmazione webcam su Linux
- 27. Distribuzione software su Linux?
- 28. Compilare una libreria condivisa su Linux per indirizzare tutte le distribuzioni
- 29. Come si compila su linux per condividere con tutte le distribuzioni?
- 30. Come aggiungere un'autorità di certificazione aziendale (CA) a git su Cygwin (e alcune distribuzioni Linux)
Hai avuto un'esperienza personale con l'utilizzo di questo strumento? L'articolo a cui ti riferisci è [oltre 2 anni] (https://developer.mozilla.org/en-US/docs/Signing_an_executable_with_Authenticode$history), quindi una certa sicurezza che sia ancora aggiornato sarebbe bello . –
@RobW Ho firmato gli eseguibili usando quel comando usando Mono 3.2.5 e funziona bene (in effetti ho appena testato). Non riesco a verificare i passaggi esatti per l'esportazione del certificato da Windows in questo momento, dal momento che non sono su un Mac, ma so che il flusso dato è molto simile a quello che ho usato di recente. –
Grazie per la conferma! Non preoccuparti per i certificati, OpenSSL è in grado di convertire qualsiasi cosa in qualcosa. –