Driver 的數位簽章

Microsoft 為了安全性的考量,在 x64 OS 下的 Driver 一定要有合法的數位簽章,否則下場就是這樣,甚麼都不能做。



而我最近碰到一個讀 Physical memory 的問題,改寫 Driver 後卻一直無法使用,即使加上公司的數位簽章也是一樣。Google 了兩天後,終於找到原因順利解決了,步驟如下:

首先,確認你的數位憑證可用於程式碼簽署,然後檢視最上層的憑證 (在此為 VeriSign)


查看最上層憑證的簽發者 (Issuer) 為誰,然後到 Cross-Certificates for Kernel Mode Code Signing 取得對應的交叉認證檔案 (文章中還有提到憑證指紋 (Thumbprint),雖然我的內容跟網站上的不一樣,不過目前測試的結果還是可以使用)


最後照以下的方式簽署,就可以正常使用了

signtool.exe sign /v /ac "VeriSign Class 3 Public Primary Certification Authority - G5.cer" /s my /n "Company name" /t "http://timestamp.verisign.com/scripts/timstamp.dll" /du "http://www.company_name.com" "Driver_name.sys"

上面 .cer 的檔案就是從 Microsoft 取得的交叉認證檔案,其餘參數跟原本簽署數位簽章的一樣

結論就是要在 x64 OS 執行 Driver,除了 Microsoft 認可的數位憑證外,還要加上對應的交叉憑證。先前就是少了這一個步驟,所以才無法正常使用。


Win10 更新


因目前數位簽章更換為 DigiCert,因此需要去 Selecting the Correct Cross-certificate 重新下載交叉憑證


並以下列方式簽署即可 (注意 timestamp 需更換為 degicert 的網站)

signtool sign /v /ac "DigiCert High Assurance EV Root CA.crt" /s my /n "Company name" /t http://timestamp.digicert.com "Driver_name.sys"


參考:如何使用 Microsoft Authenticode 或 Microsoft Office 和 VBA 簽署 Microsoft Vista 64 位元核心模式軟體?

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯