證明簽署 Windows 驅動程式
本文說明如何使用證明簽署來簽署驅動程式。 如需證明簽署的詳細資訊和需求,請參閱 Windows 10 證明簽署的驅動程式。
重要
自 2023 年 3 月 1 日起,已簽署以零售對象為目標的證明驅動程式不再發布在 Windows Update 上。 選取 CoDev 或 Test Registry Key / Surface SSRK 選項時,仍支持測試案例的已簽署驅動程式。
必要條件
閱讀並瞭解 Windows 10 證明簽署驅動程式的需求。
註冊硬體開發人員計劃。 如果您尚未註冊,請遵循如何註冊Microsoft Windows 硬體開發人員計劃中的步驟。
您必須擁有擴充驗證 (EV) 程式代碼簽署憑證。 檢查您的組織是否已經有程式代碼簽署憑證。 如果您的公司已經有憑證,請提供憑證。 如果您的組織沒有憑證,您必須 購買 EV 憑證。
請遵循下載適用於 Windows 10 的套件和工具中所述的程式,下載並安裝 Windows 驅動程式套件 (WDK)。
(選擇性) 下載本文中使用的響應驅動程式範例 。
建立 CAB 檔案
在本節中,我們會逐步完成建立 CAB 檔案提交的程式。 我們使用響應驅動程式範例來說明程式。
典型的 CAB 檔案提交必須包含:
驅動程式本身,例如Echo.sys
儀錶板用來協助簽署程式的驅動程式 INF 檔案。
用於偵錯資訊的符號檔。 例如 Echo.pdb。 Microsoft自動化當機分析工具需要 .pdb 檔案。
目錄 .CAT 檔案是必要的,且僅用於公司驗證。 Microsoft重新產生目錄檔案,並取代任何提交的目錄檔案。
注意
CAB 檔案中的每個驅動程式資料夾都必須支援同一組架構。 例如,他們必須支援 x86、x64,或者它們全都必須同時支援 x86 和 x64。
參考驅動程式位置時,請勿使用 UNC 檔案共享路徑。\\\server\share
您必須使用對應的驅動器號,CAB 才能有效。
若要建立 CAB 檔案:
收集要登入單一目錄的二進位檔。 在此範例中,使用
C:\\Echo
。以系統管理員身分開啟命令提示字元視窗。
輸入
MakeCab /?
以檢視 MakeCab 選項:C:\Echo> MakeCab /? Cabinet Maker - Lossless Data Compression Tool MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination] MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...] source File to compress. destination File name to give compressed file. If omitted, the last character of the source file name is replaced with an underscore (_) and used as the destination. /F directives A file with MakeCAB directives (may be repeated). Refer to Microsoft Cabinet SDK for information on directive_file. /D var=value Defines variable with specified value. /L dir Location to place destination (default is current directory). /V[n] Verbosity level (1..3).
準備 cab 檔案 DDF 輸入檔。 針對我們的 Echo 驅動程式,它看起來可能像這樣:
;*** Echo.ddf example ; .OPTION EXPLICIT ; Generate errors .Set CabinetFileCountThreshold=0 .Set FolderFileCountThreshold=0 .Set FolderSizeThreshold=0 .Set MaxCabinetSize=0 .Set MaxDiskFileCount=0 .Set MaxDiskSize=0 .Set CompressionType=MSZIP .Set Cabinet=on .Set Compress=on ;Specify file name for new cab file .Set CabinetNameTemplate=Echo.cab ; Specify the subdirectory for the files. ; Your cab file should not have files at the root level, ; and each driver package must be in a separate subfolder. .Set DestinationDir=Echo ;Specify files to be included in cab file C:\Echo\Echo.Inf C:\Echo\Echo.Sys
輸入下列命令以建立 CAB 檔案。
C:\Echo> MakeCab /f "C:\Echo\Echo.ddf
MakeCab 的輸出應該會顯示所建立 CAB 檔案中的檔案數目。 在此情況下,應該會有兩個檔案。
C:\Echo> MakeCab /f Echo.ddf Cabinet Maker - Lossless Data Compression Tool 17,682 bytes in 2 files Total files: 2 Bytes before: 17,682 Bytes after: 7,374 After/Before: 41.70% compression Time: 0.20 seconds ( 0 hr 0 min 0.20 sec) Throughput: 86.77 Kb/second
在子目錄中找出 CAB 檔案
Disk1
。 您可以在 檔案總管 中選取 CAB 檔案,以確認它是否包含預期的檔案。
使用您的 EV 憑證簽署 CAB 檔案
若要使用您的 EV 憑證簽署 CAB 檔案,請使用 EV 憑證提供者建議的程式。 例如,若要使用 SHA256 憑證/摘要演演算法/時間戳簽署 CAB 檔案,請輸入下列命令:
C:\Echo> SignTool sign /s MY /n "Company Name" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v "C:\Echo\Disk1\Echo.cab"
重要
請記得使用業界最佳做法來管理 EV 程式代碼簽署程式的安全性。
使用合作夥伴中心提交 EV 簽署的 Cab 檔案
移至 合作夥伴中心硬體儀錶板 ,並使用您的認證登入。
選取 [ 提交新硬體]。
在 [ 套件和簽署屬性 ] 區段中,輸入驅動程式提交的產品名稱。 此名稱可用來搜尋及組織驅動程式提交。
注意
如果您與另一家公司共用您的驅動程序,他們會看到此名稱。
讓這兩個測試簽署選項保持未核取狀態。
針對 [要求籤章],選取您要包含在驅動程式套件中的簽章。
向下移至頁面,然後選取 [ 提交]。
簽署程式完成時,請從硬體儀錶板下載已簽署的驅動程式。
驗證驅動程式是否已正確簽署
完成下列步驟,以確保驅動程式已正確簽署。
下載提交檔案之後,請擷取驅動程序檔案。
以系統管理員身分開啟命令提示字元視窗。
輸入下列命令,確認驅動程式已如預期般簽署。
C:\Echo> SignTool verify Echo.Sys
若要列出其他資訊,並讓 SignTool 驗證具有多個簽章的檔案中的所有簽章,請輸入下列命令:
C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
若要確認驅動程式的 EKU,請完成下列步驟。
開啟 Windows 檔案總管並找出二進位檔。 選取並按住檔案(或以滑鼠右鍵按兩下),然後選取 [ 屬性]。
在 [ 數字簽名] 索引 標籤上,選取 [簽章] 清單中的所列專案。
選取 [詳細數據],然後選取 [ 檢視憑證]。
在 [ 詳細數據] 索引標籤上,選取 [增強金鑰使用方式]。
當儀錶板重新簽署驅動程式時,會使用下列程式:
- 附加Microsoft SHA2 內嵌簽章。
- 如果驅動程式二進位檔內嵌由客戶使用自己的憑證簽署,則不會覆寫這些簽章。
- 使用 SHA2 Microsoft 憑證建立並簽署新的目錄檔案。 此目錄會取代客戶提供的任何現有目錄。
在 Windows 上測試驅動程式
使用下列指示來安裝範例驅動程式。
以系統管理員身分開啟命令提示字元視窗。 移至驅動程式套件資料夾,然後輸入下列命令。
C:\Echo> devcon install echo.inf root\ECHO
確認驅動程式安裝程式不會顯示「Windows 無法驗證此驅動程式軟體的發行者」。Windows 安全性對話框。
使用多個驅動程式建立提交
若要同時提交多個驅動程式:
為每個驅動程式建立子目錄。
準備參考子目錄的 CAB 檔案 DDF 輸入檔。 其看起來會像這樣:
;*** Submission.ddf multiple driver example ; .OPTION EXPLICIT ; Generate errors .Set CabinetFileCountThreshold=0 .Set FolderFileCountThreshold=0 .Set FolderSizeThreshold=0 .Set MaxCabinetSize=0 .Set MaxDiskFileCount=0 .Set MaxDiskSize=0 .Set CompressionType=MSZIP .Set Cabinet=on .Set Compress=on ;Specify file name for new cab file .Set CabinetNameTemplate=Echo.cab ;Specify files to be included in cab file ; First Driver .Set DestinationDir=DriverPackage1 C:\DriverFiles\DriverPackage1\Driver1.sys C:\DriverFiles\DriverPackage1\Driver1.inf ; Second driver .Set DestinationDir=DriverPackage2 C:\DriverFiles\DriverPackage2\Driver2.sys C:\DriverFiles\DriverPackage2\Driver2.inf