共用方式為


測試簽署

從 Windows Vista 開始,x64 型 Windows 版本需要以核心模式執行的所有軟體,包括驅動程式,才能以數位方式簽署以載入。 一開始,您可以在每次開機時,在 Windows 載入之前按 F8 按鍵,暫時停用驅動程式中對有效簽章的強制要求。 但是,在前幾個使用之後,這將會變得乏味。 您可以在使用正確的 BCDEdit 命令之後,將核心調試程式附加至測試計算機,以停用相同的載入時間強制檢查。 不過,最終在開發期間,您需要測試簽署您的驅動程式,並在將驅動程式發佈給使用者之前,進行發行簽署。

在開發和測試期間安裝未簽署的驅動程式

開發和測試期間安裝未簽署驅動程式的摘錄

根據預設,64 位版本的 Windows Vista 和更新版本的 Windows 只有在核心可以驗證驅動程式簽章時,才會載入內核模式驅動程式。 不過,在早期驅動程序開發和非自動化測試期間,可以停用此預設行為。 開發人員可以使用下列其中一個機制暫時停用有效驅動程式簽章的載入時間強制執行。 不過,若要完全自動化隨插即用 (PnP) 所安裝的驅動程序測試,則必須簽署驅動程式的 類別目錄檔案 。 需要簽署驅動程式,因為在 Windows Vista 和其後的版本中,如果驅動程式未簽署,Windows 會顯示驅動程式簽署對話框,要求系統管理員授權安裝,這可能會阻止沒有必要許可權的使用者安裝驅動程式並使用該裝置。 無法在 Windows Vista 和更新版本的 Windows 上停用此 PnP 驅動程式安裝行為。

使用 F8 進階開機選項

Windows Vista 和更新版本的 Windows 支援 F8 進階開機選項 -- [停用驅動程式簽章強制執行] -- 只針對目前的系統會話停用內核模式驅動程式的載入時間簽章強制執行。 此設定不會在系統重新啟動之間保存。

重新啟動期間會出現下列開機選項畫面,並提供停用驅動程式簽章強制執行的選項。 此布建將允許安裝未簽署的驅動程式以供測試之用。

顯示 f8 進階開機選項的螢幕快照。

附加核心調試程式以停用簽章驗證

將作用中的核心除錯器附加到開發或測試計算機,會停用核心模式驅動程式的載入時簽章強制執行。 若要使用此偵錯組態,請將偵錯電腦附加至開發或測試計算機,並執行下列命令,在開發或測試計算機上啟用核心偵錯:

bcdedit -debug on

若要使用 BCDEdit,用戶必須是系統上管理員群組的成員,並從具有管理許可權的命令提示字元執行命令。 若要開啟提升權限的命令提示字元視窗,請在桌面建立指向 Cmd.exe 的快捷方式,選取並按住(或按一下滑鼠右鍵)該快捷方式,然後選取以系統管理員身分執行

不過,請注意,在某些情況下,開發人員可能必須附加核心調試程式,但也需要維護載入時間簽章強制執行。 請參閱 附錄 1:在核心偵錯模式中強制執行 Kernel-Mode 簽章驗證 ,以瞭解如何達成此目的。

測試簽署驅動程式套件

除了使用上述兩種方法略過驅動程式簽署強制需求之外,最好的方法是測試簽署驅動程式套件。 測試簽署和驅動程式安裝可以在開發計算機上完成,但您可能想要有兩部計算機、一部用於開發和簽署,另一部用於測試。

摘錄自如何 Test-Sign 驅動程式套件

簽名電腦

這是用來測試 Windows Vista 和更新版本的 Windows 驅動程式套件的電腦。 這部電腦必須執行 Windows XP SP2 或更新版本的 Windows。 若要使用 驅動程式簽署工具,這部計算機必須已安裝 Windows Vista 和更新版本的 Windows 驅動程式套件 (WDK)。 這也可以是開發計算機。

測試計算機

這是用來安裝和測試測試已簽署驅動程式套件的電腦。 這部電腦必須執行 Windows Vista 或更新版本的 Windows。

測試簽署程序

驅動程式套件將包含驅動程式二進位檔、INF 檔案、CAT 檔案和任何其他必要檔案。 如果驅動程式是針對多個目標處理器類型所建置,驅動程式套件可能包含 x86、AMD64、IA64 等子目錄。 使用開發/簽署電腦執行這些步驟。

下列程式描述測試簽署驅動程式套件的步驟:

  1. 建置目標的驅動程式。 如果您要建置適用於 Windows 8.0 或 Windows 8.1 的驅動程式,請使用已安裝對應 WDK 的 Visual Studio 2012 或 Visual Studio 2013,例如 Windows 8.0 或 8.1 WDK。

    下列所有命令工具都應該從對應的工具/組建命令視窗 Visual Studio 2012 或 Visual Studio 2013 使用。

    備註

    Visual Studio 的命令工具位於安裝目錄 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts

    命令提示字元的五個快捷方式中,任何一個都會有 、makecert.exe、inf2cat.exe、signtool.exe、certmgr.exe等命令。

    您可以選擇最一般的「VS2013 開發人員命令提示字元」。 快捷方式可以釘選到任務欄,以便輕鬆存取。

    備註

    請注意,使用 Visual Studio,而不是驅動程式簽署的命令工具方法,您也可以使用 Visual Studio 2013 開發環境(也稱為 IDE)簽署驅動程式套件。 如需詳細資訊 ,請參閱附錄 2:使用 Visual Studio 簽署驅動程式

  2. 建立驅動程式套件資料夾並複製驅動程式檔案,維護所需的任何子目錄,例如 C:\DriverTestPackage。

  3. 建立驅動程式套件的 inf 檔案。 使用 InfVerif 工具,在 inf 檔案上使用 WDK 的 InfVerif 工具來測試 inf 檔案,如此就不會報告任何錯誤。

  4. 建立測試憑證的摘錄

    下列命令列範例會使用 MakeCert 來完成下列工作:

    • 建立名為 Contoso.com(Test)的自我簽署測試憑證。 此憑證會針對主體名稱和證書頒發機構單位 (CA) 使用相同的名稱。

    • 將憑證的複本放在名為 ContosoTest.cer 的輸出檔案中。

    • 將憑證的複本放在名為 PrivateCertStore 的證書存儲中。 將測試憑證放在 PrivateCertStore 中,會將其與其他可能位於系統上的憑證分開。

    使用下列 MakeCert 命令來建立 Contoso.com(Test) 憑證:

    makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer
    

    地點:

    • -r 選項會建立具有相同簽發者和主體名稱的自我簽署憑證。

    • -pe 選項會指定可以匯出與憑證相關聯的私鑰。

    • -ss 選項會指定包含測試證書 (PrivateCertStore) 的證書儲存名稱。

    • -n CN= 選項會指定憑證的名稱,Contoso.com(Test)。 此名稱會與 SignTool 工具搭配使用,以識別憑證。

    • ContosoTest.cer 是包含測試證書複本的檔名,Contoso.com(Test)。 憑證檔案是用來將憑證新增至受信任的跟證書授權單位證書存儲和受信任的發行者證書存儲。

    檢視測試憑證的摘錄

    建立憑證並將複本放入證書存儲之後,可以使用 Microsoft Management Console (MMC) 憑證嵌入式管理單元來檢視它。 請執行下列動作,透過 MMC 憑證管理單元檢視憑證:

    1. 若要啟動憑證嵌入式管理單元,請執行 Certmgr.msc。

    2. 在 [憑證] 嵌入式管理單元的左窗格中,展開 [PrivateCertStore 證書存儲] 資料夾,然後按兩下 [憑證]。

    下列螢幕快照顯示 PrivateCertStore 證書存儲資料夾的 [憑證] 嵌入式管理單元檢視。

    顯示測試證書的證書存儲螢幕快照。

    若要檢視 Contoso.com(Test) 憑證的詳細數據,請按兩下右窗格中的憑證。 下列螢幕快照顯示憑證的詳細數據。

    憑證視窗的螢幕快照,其中顯示有關 contoso.com (test) 憑證的一般資訊。

    請注意,[憑證] 對話方塊指出:「此 CA 跟證書不受信任。 若要啟用信任,請在受信任的根目錄憑證授權單位儲存區中安裝此憑證。這是預期的結果。 憑證無法驗證,因為 Windows 預設不會信任發行授權單位「Contoso.com(測試)」。

  5. 建立目錄檔案 (.cat 擴展名)。 使用 inf2cat 工具,如下所示建立目錄檔案。 注意,不允許在參數中留空格,/driver:<沒有空格><完整路徑>,/os::<沒有空格><os1 名稱>,:<沒有空格><os2 名稱>。

    inf2cat  /v  /driver:C:\DriverTestPackage  /os:7_64,7_x86 ,XP_X86
    

    這會建立目錄檔案,其中包含驅動程式 .inf 檔案中指定的名稱。 其他逗號分隔的作業系統可以選擇性地新增或全部新增,如下所示,中間沒有空格。

    /os:2000,XP_X86,XP_X64,Server2003_X64,Vista_X64,Vista_X86,7_x86,7_64,Server2008_x86,Server2008_x64,Sever2008_IA64,Server2008R2_x86,Server2008R2_x64,Server2008R2_IA64,8_x86,8_x64, 8_ARM, Server8_x64
    

    新 8.1 WDK 中更新的 inf2cat 具有 /os 選項值為 6_3_X86、6_3_X64、6_3_ARM 和 SERVER_6_3_X64。

    Version 區段的 INF 檔案範例。

    [Version]
    Signature="$WINDOWS NT$"
    Class=TOASTER
    ClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD5171}
    Provider=%ToastRUs%
    DriverVer=09/21/2006,6.0.5736.1
    CatalogFile.NTx86 = tostx86.cat
    CatalogFile.NTIA64 = tostia64.cat
    CatalogFile.NTAMD64 = tstamd64.cat
    PnpLockdown = 1
    

    /driver (或 /drv) 選項會指定包含一或多個 INF 檔案的目錄。 在此目錄中,會針對包含一或多個 CatalogFile 指示詞的 INF 檔案建立目錄檔案。 目錄檔名不限於8.3名稱。

    如果使用命令行自變數 /os:7_X64,Inf2Cat 會建立目錄檔案 tstamd64.cat。 同樣地,如果使用 /os:XP_X86 選項,則此工具會建立目錄檔案 toastx86.cat,同樣適用於Server2008R2_IA64。 如果只需要一個 Catalog 檔案,那麼在 INF 檔案中如下面所示有一項目就已足夠。

    CatalogFile.NT = toaster.cat
    

    或者,

    CatalogFile = toaster.cat
    

    如果 INF 檔案中的日期不大於 OS 發行日期,則如果 /os 參數適用於 Windows 7,且 INF 檔案中設定的日期早於日期,inf2cat 工具就會回報下列錯誤。

    Signability test failed.
    Errors:
    22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \toaster.inf
    

    inf2cat 工具非常嚴格地檢查每個資料夾和子資料夾,確認 INF 檔案中有條目的每個檔案是否存在。 這些遺漏的條目會顯示有意義的錯誤訊息。

    您可以從檔案總管開啟 cat 檔案,方法是按兩下或以滑鼠右鍵按鍵按下檔案,然後選取 [開啟]。 [安全性] 索引標籤會顯示一些具有 GUID 值的項目。 選取 GUID 值會顯示詳細資料,包括驅動程式套件的驅動程式檔案和新增的 OS,如下所示:

    OSAttr  2:5.1,6.1
    

    數位 5.1 是 XP OS 的版本號碼,而 Windows 7.0 OS 則為 6.1。

    建議您檢查 cat 檔案,以確認是否包含驅動程式檔案和選取的 OS。 每當新增或移除任何驅動程序檔案時,INF 檔案已經過修改,就必須重新建立 cat 檔案並再次簽署。 此處的任何遺漏都會導致安裝錯誤,這些錯誤會在安裝記錄檔中回報(在 Vista 及以上版本中為 setupapi.dev.log,或在 XP 中為 setupapi.log 檔案)。

  6. Test-Signing 驅動程式套件目錄檔案摘錄

    下列命令行示範如何執行 SignTool 來執行下列動作:

    若要測試簽署 tstamd64.cat 目錄檔案,請執行下列命令列:

    signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com tstamd64.cat
    

    地點:

    • sign 命令會將 SignTool 設定為簽署指定的目錄檔案,tstamd64.cat。

    • /v 選項會啟用詳細運作,其中 SignTool 會顯示成功執行和警告訊息。

    • /s 選項會指定包含測試憑證的證書存儲 (PrivateCertStore) 名稱。

    • /n 選項會指定安裝在指定證書存儲中的憑證名稱(Contoso.com(Test)。

    • /t 選項會指定 TSA (http://timestamp.digicert.com) 的 URL,以時間戳數字簽名。

    這很重要

    包含時間戳可提供金鑰撤銷的必要資訊,以防簽署者的程式代碼簽署私鑰遭到入侵。

  • tstamd64.cat 指定目錄檔案的名稱,該檔案會以數位方式簽署。

tstamd64.cat 會指定目錄檔案的名稱,該檔案會以數位方式簽署。 您可以開啟 cat 檔案,如先前所述

  1. 透過內嵌簽章Test-Signing 驅動程式修改摘錄

    • 在 64 位版本的 Windows Vista 和更新版本的 Windows 中,內核模式程式代碼簽署需求會指出 開機啟動驅動程式 必須具有內嵌簽章。 不論驅動程式套件是否有數位簽章的目錄檔案,都需要這樣做。

    以下是內嵌簽署核心模式驅動程式二進位檔的命令。

    signtool sign  /v  /s  PrivateCertStore  /n  Contoso.com(Test)  /t http://timestamp.digicert.com   amd64\toaster.sys
    

    amd64\toaster.sys 指定將進行內嵌簽名的核心模式二進位文件的名稱。

    在 WDK 7.1 安裝目錄中,烤麵包機範例位於 src\general\toaster\toastpkg\toastcd\ 目錄中。 Windows 8 或 8.1 WDK 範例會從Microsoft下載網站下載。 這些範例未隨附於 Windows 8 或 8.1 Windows 驅動程式套件。

    按兩下 Windows 檔案總管中的檔案,即可開啟目錄檔案,您會看到下列螢幕快照。 請注意,「檢視簽章」現在已被突顯。

    顯示安全性類別目錄檔案一般資訊的螢幕快照。

    如果您選取 [檢視簽章],您會看到以下螢幕快照,其中提供 [檢視憑證] 中的下一個檢視選項,然後從對話框本身提供 [安裝憑證] 選項。 以下是使用 certmgr.exe 工具安裝憑證的慣用命令行選項。

    螢幕快照,顯示數位簽名詳細數據的一般資訊。

    螢幕快照,顯示憑證的一般資訊。

驅動程式現在可以在簽署電腦上或測試計算機上進行測試。 如果您使用測試計算機,請將驅動程式套件複製到機器,讓檔案結構保持不變。 工具 certmgr.exe 也必須複製到測試計算機。 使用測試計算機時,將測試簽署的 Toastpkg 驅動程式套件複製到 c:\toast 暫存資料夾。

下列程式描述在任一部電腦上用來測試驅動程式的步驟:

  1. 在提升權限的命令提示字元視窗中,執行下列命令:

    bcdedit  /set  testsigning  on
    

    重新啟動電腦。

  2. 選取的摘錄:使用 CertMgr 在測試電腦上安裝測試憑證

    將用來測試簽署驅動程式的憑證 (.cer) 檔案複製到測試計算機。 您可以將憑證檔案複製到測試電腦上的任何目錄。

    下列 CertMgr 命令會將在憑證檔案 CertificateFileName.cer 中的憑證新增至測試電腦上的受信任根憑證授權單位憑證存儲區:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine root
    

    下列 CertMgr 命令會將憑證檔案中的憑證 CertificateFileName.cer 新增至測試電腦上的受信任發行者證書存儲:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine trustedpublisher
    

    在此(摘錄自CertMgr):

    /add CertificateName

    將指定證書檔案中的憑證新增至證書存儲。

    /s

    指定證書儲存是系統儲存區。

    /r 紀錄位置

    指定系統存放區的登錄位置位於HKEY_LOCAL_MACHINE之下。

    CertificateStore

    指定證書存儲區 "trustedpublisher",與 "localMachine root" 類似。

    重新啟動電腦。 您現在可以執行 Certmgr.msc,並確認上述兩個位置中可以看到ContosoTest.cer。 如果看不到憑證,則另一個安裝憑證的方式是開啟憑證,並將它安裝在上述兩個節點上,然後再次驗證。

  3. 確認 cat 檔案和 sys 檔案的簽署。 開啟具有管理員權限的命令提示字元,假設電腦中有 signtool.exe 可用,請移至 cat、inf 和 sys 檔案所在的驅動程式包目錄。 在適當的目錄中執行下列命令。

    驗證目錄檔案的 SPC 簽章

    signtool  verify  /v  /kp  /c  tstamd64.cat  toaster.inf
    

    若要檢查內嵌符號,請執行下列命令。

    驗證 Release-Signed 驅動程式檔案的簽署 開始:

    signtool  verify  /v  /kp  toaster.sys
    

    上述兩個命令會生成一個錯誤,因為它是測試簽署的並且憑證不是受信任的憑證。

    SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
    

    上述兩個驗證命令對於稍後將討論的發行簽署非常有用。

    驅動程式現在已準備好在測試計算機中安裝及測試。 建議您在安裝程式期間正確設定下列登錄機碼,以在setupapi.dev.log檔案中收集詳細資訊記錄檔(適用於 Windows Vista 和更新版本的作系統)。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Loglevel=0x4800FFFF

    在 %SystemRoot%\inf 檔案中,先重新命名setupapi.dev.log檔案,再安裝驅動程式。 安裝之後,將會建立新的記錄檔setupapi.dev.log檔案,其中包含安裝期間遇到的重要資訊。

    成功安裝驅動程序之後,即可在開發計算機或測試計算機上進行測試。

安裝、卸載和載入 Test-Signed 驅動程式套件

在步驟 2 中重新啟動系統之後,就可以安裝並載入測試簽署的驅動程式套件。 有兩種方式可以安裝驅動程式套件:

  1. 使用操作系統提供的Pnputil (pnputil.exe)工具。

  2. 使用 Devcon (devcon.exe) 工具,這是用於安裝驅動程式但不可轉散發的 WDK 命令行工具。 Devcon 工具的範例程式代碼會在 WDK 中提供。 若要重新發佈,您可以從範例程式代碼實作自己的 Devcon 工具,並重新發佈工具的版本。

使用 PnpUtil 安裝和卸載驅動程式套件

安裝驅動程式套件:

  1. 開啟提升許可權的命令視窗,並將預設目錄設定為 c:\toaster。

  2. 執行下列其中一個命令:

    • 若要只暫存驅動程式套件: pnputil /add-driver toaster.inf

    • 若要暫存驅動程式,並將它安裝在現有的裝置上: pnputil /add-driver toaster.inf /install

卸載驅動程式套件:

  1. 開啟提升許可權的命令視窗。

  2. 識別對應要從返回的清單中移除的驅動程式套件的 OEM INF 名稱 pnputil /enum-drivers

  3. 執行:pnputil /delete-driver \<OEM INF name> /uninstall

使用 DevCon 安裝和卸載驅動程式套件

安裝驅動程式套件:

  1. 開啟提升許可權的命令視窗,並將預設目錄設定為 c:\toaster。

  2. Devcon.exe 會在 WDK 工具目錄中提供 x86 版本、amd64 版本和 ia64 版本。 將相關的版本複製到 c:\toaster 目錄,然後執行下列命令。

    devcon.exe update <inf> <hwid>
    

    建議在<hwid>周圍使用引號。 針對烤箱範例,其為:

    devcon.exe update c:\toaster\toaster.inf "{b85b7c50-6a01-11d2-b841-00c04fad5171}\MsToaster"
    

卸載驅動程式套件:

當裝置仍在使用它時,不應該從系統移除驅動程式套件。 如果需要移除裝置才能移除驅動程式套件,可以使用Devcon工具使用 「移除」參數來移除裝置。 devcon.exe /? 顯示此工具的所有開關。 若要取得有關使用切換的特定資訊,應該新增「說明」,如下所示的「移除」切換。

devcon.exe help remove

拿掉裝置之後,若要移除驅動程式,則需要兩個命令。 使用具有 「dp_enum」 參數的第一個命令,尋找對應至電腦上安裝之驅動程式套件的驅動程式 inf 檔名。

devcon dp_enum

此命令將顯示與驅動程式套件對應的所有 oemNnn.inf 檔案清單,其中 Nnn 是一個十進位數字,並包含類別資訊以及提供者資訊,如下所示。

oem39.inf
    Provider: Intel
    Class: Network adapters
oem4.inf
    Provider: Dell
    Class: ControlVault Device

若要從 DriverStore 移除對應的驅動程式套件,請使用下列 Intel “Network Adapters” 驅動程式所示的下一個命令:

devcon.exe dp_delete oem39.inf

確認 Test-Signed 驅動程序運作正常

若要確認 Toastpkg 運作正常:

  1. 啟動設備管理員

  2. 從裝置清單中選取 [烤箱]。 如需範例,請參閱下面的螢幕快照。

    顯示烤箱裝置在設備管理器中的螢幕截圖。

  3. 若要開啟驅動程式的屬性對話框,請按兩下 [烤箱套件範例烤箱],然後選取 [屬性]

  4. 若要確認烤箱正常運作,請在 [一般] 索引卷標上,核取 [裝置狀態] 方塊

設備管理器可用來從 [屬性] 對話框卸載裝置和驅動程式。

如何針對 Test-Signed 驅動程式進行疑難解答

如果您遇到這些程序的任何困難,請參閱 驅動程式簽署安裝的疑難排解