開發和調試的(de)時候(hou)驅(qu)動程序(xu)還是(shi)很(hen)不穩定會遇到各種問(wen)題,所(suo)以該形態下的(de)驅(qu)動程序(xu)不適合也不能(neng)成功獲得微軟簽名,所(suo)以在(zai)該階段(duan)為了能(neng)讓(rang)驅(qu)動程序(xu)可以在(zai)windows電腦上可以正(zheng)常運(yun)行(xing)調試(shi)(shi)測(ce)(ce)(ce)試(shi)(shi)。為了能達(da)到這個目標我們就(jiu)要對驅動進行(xing)測(ce)(ce)(ce)試(shi)(shi)簽名(ming),以方(fang)便我們工程(cheng)師(shi)調試(shi)(shi),下(xia)面我就(jiu)介(jie)紹一下(xia)測(ce)(ce)(ce)試(shi)(shi)簽名(ming)的(de)整個過程(cheng)。
一、測試證(zheng)書的創建(jian)
測(ce)試(shi)簽(qian)名(ming)需要(yao)測(ce)試(shi)證(zheng)書。 生成測試(shi)證書后,可(ke)以使用它對(dui)多個驅(qu)動程序或驅動程序包進(jin)行(xing)測試簽名。
本(ben)主題介紹如(ru)何使用MakeCert工具創(chuang)建測(ce)試證書。 在(zai)大多數(shu)開(kai)發環境中,通(tong)過(guo) MakeCert 生成(cheng)的(de)測(ce)試(shi)證書應(ying)該足以(yi)測(ce)試(shi)測(ce)試(shi)簽名驅動程(cheng)序(xu)或驅動程(cheng)序(xu)包的(de)安(an)裝和加載(zai)。
以(yi)下命令(ling)行示(shi)例使用 MakeCert 來完成以(yi)下任務:
· 創建名(ming)為 " 51whql .com (測試)" 的(de)自(zi)簽名測試證書。 此證(zheng)書對使用者名稱(cheng)和證(zheng)書頒發(fa)機構(CA)使用相同的(de)名稱。
· 將證書的(de)副本放入名(ming)為whqlTest的(de)輸出文件中。
· 將證書(shu)的副本(ben)放(fang)入名為PrivateCertStore的證(zheng)書存儲中。 如果將測試證書放(fang)在PrivateCertStore中(zhong),則(ze)會將(jiang)其與系統上的其他證(zheng)書隔離開來。
使用以下(xia) MakeCert 命令創建(jian)51whql .com (Test) 證書:
cmd
makecert -r -pe -ss PrivateCertStore -n CN=51whql.com(Test) -eku 1.3.6.1.5.5.7.3.3 WhqlTest.cer
其中:
· -R選項(xiang)創建一個(ge)自簽(qian)名證書,該證書具(ju)有相同的頒(ban)發者和使用者名稱。
· -Pe選項指定可以(yi)導出與(yu)證書關聯的私鑰。
· -Ss選項指定包(bao)含(han)測試證書(PrivateCertStore)的證書存(cun)儲(chu)的名(ming)稱。
· -N CN = option 指定證書的名稱("51whql.com")。 此名稱與SignTool工具一起用于標識證書(shu)。
· EKU 選(xuan)項(xiang)將(jiang)一個(ge)或多個(ge)以逗號(hao)分隔的增強(qiang)型(xing)密(mi)鑰(yao)用法對象(xiang)標(biao)識符(oid)列(lie)表插入到證書中。 例(li)如, -eku 1.3.6.1.5.5.7.3.2 插入客(ke)戶端身份(fen)驗證 OID。 有關允許的(de) Oid 的定義,請參閱(yue) CryptoAPI 2.0 中的 Wincrypt.h 文件。
· WhqlTest是包(bao)含測試證書的副本的文(wen)件名,即 51whql.com (test)。 證書文件(jian)用于將(jiang)證書添加到 "受(shou)信任的根證書頒發機構" 證書存儲和 "受信任的發布(bu)者(zhe)" 證書存儲中。
包含測試(shi)證(zheng)書的證(zheng)書存儲區將添加到(dao) Windows 在創建證書(shu)存儲的開發計算機上為用戶帳戶管理的證書(shu)存儲列表。
開(kai)發人員只需要創建一個 MakeCert 測試(shi)證(zheng)書來對開發計算(suan)機上(shang)的所有(you)驅動程序包進行簽(qian)名。
二、配置(zhi)支持測試(shi)證書的電腦
管理(li)員模(mo)式(shi)運行(xing)cmd
輸入命令:bcdedit /set testsigning on
三、進(jin)行測試簽(qian)名
創建(jian)或(huo)更新驅動程序包(bao)的編錄文件后(hou),可(ke)以通過(guo)SignTool對該目錄文件(jian)進行簽名。 簽名后,如果修(xiu)改(gai)了驅動(dong)程序(xu)包的(de)任何(he)組件,則存(cun)儲在目錄文件中的(de)數字簽名將會失效。
對編錄文件進(jin)行(xing)數字簽名時,SignTool 會(hui)將數(shu)字簽名保存在目錄文件中。 SignTool 不會更改驅動程序包(bao)的組(zu)件。 但是,由于(yu)目(mu)錄文件(jian)包含驅動程序(xu)包的(de)組件(jian)的(de)哈(ha)希(xi)值,因(yin)此(ci),只要這(zhe)些組件(jian)將哈(ha)希(xi)到相同的(de)值,就會保留(liu)目(mu)錄文件(jian)中的(de)數字簽名。
SignTool 還可以(yi)向數字簽名添加時間戳。 時間戳允許確定(ding)創建簽名的時間,并在必要時支持更(geng)靈活的證(zheng)書(shu)吊(diao)銷選項。
以(yi)下命令行說明了(le)如何運行 SignTool 來(lai)執行以下操作:
· 對toastpkg.inf示例驅(qu)動程序包的tstamd64.cat目(mu)錄文件(jian)進行測試(shi)簽名(ming)。
· 使用 51whql.com (測試 PrivateCertStore 中的(de)) 證書來測試(shi)簽名。
· 通過時(shi)間戳頒發(fa)機構 (TSA) 來標(biao)記數字簽(qian)名(ming)。
若要對 tstamd64.cat 目(mu)錄文件進行(xing)測試簽名,請運行(xing)以下命(ming)令行(xing):
Signtool sign /v /fd sha256 /s PrivateCertStore /n 51whql.com(Test) /t //timestamp.digicert.com tstamd64.cat
其中:
· Sign命令將(jiang) SignTool 配置為(wei)對指(zhi)定的編錄文件 tstamd64.cat 進行簽名(ming)。
· /V選項(xiang)啟用詳細操作,其中,SignTool 顯(xian)示成功執(zhi)行和警(jing)告消息。
· /Fd選(xuan)項指定(ding)用于創建文(wen)件(jian)(jian)簽名的文(wen)件(jian)(jian)摘要算法。 默(mo)認值為 SHA1。
· /S選(xuan)項(xiang)指定包含測試證書(shu)的證書(shu)存儲 (*PrivateCertStore) *的(de)名稱。
· /N選(xuan)項指定在指定的證書存儲中安裝的 (51whql.com (測試) # B3的(de)證書的(de)名(ming)稱。
· /T選(xuan)項指定了 //timestamp.digicert.com 用于對數字簽名(ming)進行時(shi)間戳的 TSA () 的 URL。