本文說明如何使用證明簽署來簽署驅動程式。 如需證明簽署的詳細資訊和需求,請參閱 Windows 10 證明簽署的驅動程式。
這很重要
自 2023 年 3 月 1 日起,經簽署的證明針對零售客戶的驅動程式不再在 Windows Update 上發布。 在使用 CoDev 或 Test Registry Key / Surface SSRK 選項進行測試場景時,支援持續提供對證明簽署驅動程式的支持。
先決條件
閱讀並瞭解適用於測試案例的 Windows 10 證明簽署驅動程式 需求。
註冊硬體開發人員計劃。 如果您未註冊,請遵循 註冊 Microsoft Windows 硬體開發人員計劃中的步驟。
您必須擁有延伸驗證(EV)程式代碼簽署憑證。 檢查您的組織是否已經有程式代碼簽署憑證。
如果您有現有的憑證,請讓憑證可供使用。
如果您的組織沒有憑證, 請購買 EV 憑證。
依照 下載並安裝 Windows ADK 中所述的程式,下載並安裝 Windows 評定及部署套件(Windows ADK)。
(選擇性)下載本文中使用的 Echo 驅動程式範例 ,其可在 GitHub 上取得。
建立 CAB 檔案
下列程式會使用 Echo 驅動程式範例 建立 CAB 檔案提交,以說明步驟。
典型的 CAB 檔案提交必須包含下列元件:
驅動程式本身,例如 Echo.sys。
控制面板使用的驅動程式 INF(.inf)檔案,以促進簽署過程。
用於偵錯資訊的符號檔,例如 Echo.pdb。 Microsoft自動化當機分析工具需要 .pdb 檔案。
目錄 .CAT 檔案是必要的,且僅用於公司驗證。 Microsoft重新產生目錄檔案,並取代先前提交的任何目錄檔案。
備註
CAB 檔案中的每個驅動程式資料夾都必須支援同一組架構。 例如,它們必須支援 x86、x64,或者必須全部支援 x86 和 x64。
當您參考驅動程式位置 (\server\share) 時,請勿使用 UNC 檔案共享路徑。 您必須使用映射的磁碟機代號,CAB 才能有效。
若要建立 CAB 檔案,請遵循下列步驟:
將待簽署的二進位檔案彙整在單一目錄中。 此範例會使用
C:\Echo資料夾。使用系統管理員許可權開啟命令提示字元視窗。
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 檔案
簽署 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 上測試驅動程式
安裝範例驅動程式並在 Windows 上進行測試:
使用系統管理員許可權開啟命令提示字元視窗。
移至驅動程式套件資料夾,然後輸入下列命令。
C:\Echo> devcon install echo.inf root\ECHO確認驅動程式安裝程式不會顯示下列錯誤訊息:
Windows 無法驗證此驅動程式軟體的發行者 message._
使用多個驅動建立提交項目
請遵循下列步驟同時提交多個驅動程式:
為每個驅動程式建立子目錄:
準備參考子目錄的 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