我想嘗試簽署軟體可執行檔。我擔心有東西逃不過我。
我將要從 CA 取得證書,但在此之前我想知道我在做什麼,所以我做了一個測試:
我建立了一個自簽名憑證:
makecert -r -ss myPrivateCert -sk c:\test -n "CN=My Company Inc." testCert.cer
然後簽署一個可執行檔:
signtool sign /v /s myPrivateCert /n "My Company Inc." /t http://timestamp.verisign.com/scripts/timstamp.dll c:\folder\my_installer.exe
對於這兩個命令,我都取得了成功。
步驟3:「安裝測試證書」:http://msdn.microsoft.com/en-us/library/bb756995
成功。
(注意:在資料夾中c:\test
,我放置了從 Microsoft 建議的交叉證書列表下載的證書,例如VeriSign Class 3 Public Primary Certification Authority - G5.cer
- 我只是猜測我應該這樣做。)
我跑certmgr c:\folder\my_installer.exe
我收到了我添加的 3 個證書的列表,其中包含主題、頒發者、序號...(來自 My Company Inc. 和 Verisign),所以顯然一切都很好。
即使在那之後,如果我雙擊安裝程式(或可執行檔),我也會收到有關未知發布者的 UAC 訊息...
那麼我還需要做什麼才能讓該框消失或顯示“我的公司”。對於製片人?這僅適用於本地機器,一切都是手工完成的...
為了進行真實測試,我假設我的客戶端是 VirtualBox 環境......所以?下一步:將安裝程式移至 VirtualBox 中並執行它?
但是我如何告訴客戶有關密鑰或證書之類的資訊?我是否將 cer 檔案與 exe 一起複製?我必須把它放在一個特別的地方嗎?我要複製任何其他文件嗎?我必須再次運行 mmc 嗎?用戶必須做這樣的事情嗎?因為從用戶的角度來看,它看起來非常複雜......這非常令人困惑......
我假設,例如,如果我從 Verisign 購買真正的證書,它將通過網絡進行身份驗證,我不需要執行任何其他操作(除了上面的兩個命令,減去 -r)?
我在網路上找到了很多關於這方面的指導,但每一個都讓我像開始時一樣困惑——也許他們每個人都假設了一些先驗知識...
答案1
它不會「透過網路進行驗證」(除了檢查憑證撤銷清單 (CRL) 之外)——根 CA 硬連線到作業系統中,並透過 Windows 更新或作業系統安裝磁碟進行安裝。換句話說,它們是硬碟上的一組靜態數據,無法(輕鬆)修改。
讓煩人的盒子消失的方法是:
- 相信你的萬金油簽名 CA(通常是個壞主意,但它會起作用);或者
- 由公眾信任的官方根 CA 或其中間機構之一對其進行簽名。
您引用了威瑞信。好的。他們是為您提供程式碼簽署憑證的幾個可能的提供者之一。該框仍然出現,因為據我所知,Windows 被編程為自動彈出所有自簽名憑證的警告。如果您嘗試根據自己建立的根 CA 產生 CSR,則可以透過信任您的根 CA 來使該方塊消失,這樣就可以了。但是,您必須讓您的客戶信任您的根 CA,這在大多數情況下無法達到目的。因此,公共信任網路是最簡單的路徑。供應商通常甚至會向您提供有關如何使用其服務以及如何對程式碼進行簽署的明確說明。