我準備了一個應用程序和網站,客戶可以在下載之前爲其設置多個選項。設置以二進制格式存儲在文件末尾(附加),然後編輯後的文件發送給最終用戶。問題在於文件「內容」的更改會破壞文件簽名 - 是否有機會使用任何命令行工具重新簽署此更改的文件?我試圖使用微軟的SignTool,但它在Linux上無法正常工作。在基於Linux的發行版上籤署Windows應用程序
回答
它實際上是quite straight forward使用Mono
的signtool;棘手的部分(在鏈接的Mozilla文章中有更詳細的描述)將以正確的格式將證書從Windows複製到Linux。
將Windows PFX證書文件轉換爲PVK和SPC文件只需在將證書從Windows複製到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
實際上對exe的簽名是直截了當的;
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
您可以嘗試osslsigncode
要註冊的EXE或MSI文件,你現在可以做的:
osslsigncode sign -certs <cert-file> -key <der-key-file> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
,或者如果您使用的是PEM或PVK密鑰文件用密碼 帶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
,或者如果你想添加一個時間戳,以及:
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
您可以使用存儲在PKCS#12容器中的證書和密鑰:
osslsigncode sign -pkcs12 <pkcs12-file> -pass <pkcs12-password> \
-n "Your Application" -i http://www.yourwebsite.com/ \
-in yourapp.exe -out yourapp-signed.exe
要登錄一個包含java類文件的CAB文件:
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
這是爲我工作的解決方案。 signcode工具沒有簽名文件(雖然它報告簽名成功) – treaz
這對於在Mageia Linux下用NSIS和Ant簽名我的Windows安裝程序(包裝Java軟件)很有用。非常感謝:) – gouessej
我很高興我找到了這個偉大的解決方案!我實際上想在Windows中使用微軟的signtool.exe來簽署我的代碼,所以我在閱讀你的答案後在Windows上的Ubuntu上使用了Bash。如果其他人在同一條船上,這裏是簡要說明https://blog.synapp.nz/2017/06/16/code-signing-a-windows-application-on-linux-on-windows/ –
- 1. Windows應用程序簽署
- 2. 在windows上運行android應用程序,在linux上開發
- 3. 在Windows和Linux上部署C#Windows窗體應用程序
- 4. 在Linux上籤署NSIS安裝程序
- 5. 在Linux上部署PyQt5應用程序
- 6. 開發和部署Linux應用程序的基礎知識
- 7. solusOs - 是基於什麼Linux發行版?
- 8. 在Linux發行版中分發二進制應用程序
- 9. 如何簽署Windows Store應用程序?
- 10. 無法在Windows 7上部署基於VB6的安裝程序
- 11. 在Appfog上部署基於Deployd(deployd.com)的Node.js應用程序
- 12. 如何在Tomcat上部署基於EJB的應用程序
- 13. 從基於WSGI的web應用程序在Linux上執行進程
- 14. 在Linux上開發asp.net應用程序的windows服務器
- 15. 在Mac上爲Facebook應用程序簽署Android應用程序
- 16. 適用於Windows和Linux的應用程序開發
- 17. 在Linux機器上從Windows上運行GTK +應用程序
- 18. 在Windows中分發基於wxHaskell的應用程序
- 19. 我可以在Windows上開發.NET應用程序和部署Linux和Mac版本?
- 20. 簽署和發佈Android應用程序
- 21. 發佈windows應用程序 - ClickOnce部署
- 22. 如何在Linux發行版中託管asp.net Web應用程序
- 23. 在Linux上開發Spotify應用程序
- 24. 在Windows和Linux上運行的Visual Java應用程序
- 25. 使現有的C#Windows應用程序在Linux上運行
- 26. 構建Qt應用程序用於Windows Phone的Linux上
- 27. 簽署應用程序,但不在Android市場上發佈
- 28. 在Linux和Windows主機上開發Android應用程序
- 29. 在Windows和Linux上開發Web應用程序
- 30. 該應用程序在Windows中運行,但不在Linux上
你有使用這個工具的個人經驗嗎?您提到的那篇文章是[超過2年](https://developer.mozilla.org/en-US/docs/Signing_an_executable_with_Authenticode$history),所以有些保證它仍然是最新的會很好。 –
@RobW我已經使用Mono 3.2.5使用該命令簽署了可執行文件,它運行良好(實際上我只是測試過)。我現在無法測試從Windows導出證書的確切步驟,因爲我不在Mac上,但我知道給出的流程與我最近使用的非常相似。 –
感謝您的確認!不要擔心證書,OpenSSL能夠將任何東西轉換爲任何東西。 –