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

Solution ID:    SO5820    Updated:    02/21/2016

Problem

使用 Microsoft Authenticode 或 Microsoft Office 和 VBA 簽署 Microsoft Windows 64 位元核心模式軟體

Solution

64 位元版 Microsoft Windows 需要使用核心模式程式碼簽章

若要使用 Microsoft Authenticode 或 Microsoft Office 和 VBA 簽署 64 位元核心模式軟體,您將需要下載並安裝下列產品:

  1. Microsoft Windows SDK(必須安裝以取得以下所需的工具)
  • pvk2pfx.exe
  • inf2cat.exe
  • signtool.exe    

      2. 微軟​交叉憑證
         請在這篇文章底部的附加文件下載此憑證,文件名是​ MSCV-VSClass3.cer   

      3. PVK 匯入(賽門鐵克 不支援此工具)
          如果您的證書不在個人證書欄,使用PVK工具導入您的證書到個人證書欄​。
          從使用命令行界面signtool.exe 簽署代碼。​

如果想成功簽署驅動程序文件,請確保遵循以下步驟:

1. 確保Microsoft驗證簽名證書被安裝在用戶的個人證書存儲。 這可能需要pvk2pfx.exe和/或pvkimport.exe)
 
2. 使用inf2cat.exe驗證驅動程序包INF文件,並創建一個有效的目錄文件。如果成功,一個目錄文件(*.cat)將被創建。

3. 使用signtool.exe簽署目錄(*.cat)和所有的驅動程序(的* .sys),如下列指令:

注意: CatFileName.cat 置換為你需要簽署的文件名​這將需要針對所有的驅動和目錄文件的運行​
 

SHA-1 包含時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /s MY /n Symantec Corp /t http://timestamp.veriSign.com/scripts/timstamp.dll C:\CatFileName.cat

SHA-1 不包含時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /s MY /n Symantec Corp C:\CatFileName.cat

SHA-256 包含 RFC3161時間戳:

signtool sign /v /ac C:\Authenticode\MSCV-VSClass3.cer /s MY /n Symantec Corp /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/ C:\CatFileName.cat

SHA-256 不包含 RFC3161時間戳:

signtool sign /v /ac C:\Authenticode\MSCV-VSClass3.cer /s MY /n Symantec Corp /fd sha256 C:\CatFileName.cat

4. 確認文件被正確交叉簽署,請使用以下語法,並尋找微軟代碼驗證根(Microsoft Code Verification Root)":
 

signtool verify /v /kp "C:\driver.sys" 

 

此範例使用數個 SignTool 支援的引數:

  • Sign:設定工具簽署名為 CatFileName.cat 的目錄檔
  • /a: 自動選擇最佳的簽名證書。登錄工具會找到所有滿足規定條件,並選擇一個有效時間最長的有效證書。如果這個選項不存在,登錄工具期望發現只有一個有效的簽名證書。
  • /v:指定 verbose 選項,用於成功執行或警告訊息
  • /s:指定名為 SPCCertificateStore 的憑證存放區(如果憑證匯入「個人存放區」中,則 SPCCertificateStore 為 My
  • /n:是指憑證中出現在「ISSUED TO」欄位的公司名稱。
  • /t:指定數位簽章將加上 URL 所指的時間戳記授權單位 (TSA) 發行的時間戳記
  • /f: 指定一個文件中的簽名證書。僅支持個人信息交換(PFX)文件格式。​
  • /p: 如果該文件是受密碼保護的PFX格式,使用/ p選項來指定密碼。​
  • /as: 追加此簽名。如果目前沒有主簽名,這一簽名會成為主簽名​
  • /fd: 指定文件摘要算法用於創建文件簽名。默認值為SHA1​
  • /tr: 指定RFC3161時間戳服務器的URL。如果該選項(或/t)不存在,則簽名的文件不會被時間標記。如果時間戳失敗會生成一條警告。此選項不能與/t 選項並用。​

注意:加上SHA1 時間戳記的 賽門鐵克 URL 為 http://timestamp.verisign.com/scripts/timstamp.dll。(必須有 timstamp.dll 檔案名稱才符合舊的 MS-DOS 命名慣例)

​          賽門鐵克RFC3161時間戳網址是:​http://sha256timestamp.ws.symantec.com/sha256/


如需詳細資訊,請參閱下列微軟知識庫文件:

Windows驅動程序工具包(WDK):http://www.microsoft.com/whdc/driver/64bitguide.mspx
使用SignTool簽署一份文件:http://msdn.microsoft.com/en-us/library/aa388170
交叉证书内核模式代码签名:​http://msdn.microsoft.com/en-us/library/windows/hardware/dn170454(v=vs.85).aspx

Microsoft 同時提供下列摘要版 簽署程序:

問題 - 使用 signtool 和交叉憑證簽署驅動程式時的問題
環境 - Vista 64 位元
解決方法 - 按兩下安裝憑證,並允許根據憑證類型自動安裝。如此您就不必擔心憑證所在的憑證存放區為何

使用 SIGNTOOL 時,使用經過 x64 檢查的建置環境或 Server 2008 SDK 建置環境
僅交叉簽署 .SYS 檔。CAT 檔不需要交叉簽署。載入時,系統只會查看 SYS 檔進行驗證,而不會查看 CAT 檔(僅適用於 64 位元系統)。

交叉簽署時,請使用下列語法:注意:「Company Cert Name(公司憑證名稱)」應該與您所屬憑證的「憑證 ISSUED TO」欄位完全一致。

下列簽署語法使用一個證書存儲在密碼保護.PFX的文件

SHA-1 包含時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /f C:\Authenticode\YourCert.pfx /p Password /n "Symantec Corp" /t http://timestamp.verisign.com/scripts/timstamp.dll "C:\driver.sys"

SHA-1 不包含時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /f C:\Authenticode\YourCert.pfx /p Password /n "Symantec Corp" "C:\driver.sys"

SHA-256 包含 RFC3161時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /f C:\Authenticode\YourCert.pfx /p Password /n "Symantec Corp" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/ "C:\driver.sys"

SHA-256 不包含 RFC3161時間戳:

signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /f C:\Authenticode\YourCert.pfx /p Password /n "Symantec Corp" /fd sha256 "C:\driver.sys"


提示​:

  • 確認程式已正確交叉簽署,請使用下列語法
signtool verify /v /kp driver.sys​
  • 驗證驅動程序被​特定的目錄文件“簽名”使用下面的命令:
signtool verify /v /kp /c "C:\CatFileName.cat" "C:\driver.sys"
  • 為了有效減少啟動時間,簽署所有驅動程序和目錄文件。


 

Attachment

MSCV-VSClass3[1].cer
2K • < 1 minute @ 56k, < 1 minute @ broadband


Legacy ID

vs41181