SignTool

SignTool (Signtool.exe) 是命令行 CryptoAPI 工具,可數位簽署檔案、驗證檔案中的簽章,以及時間戳檔案。

    SignTool [Operation] [Options] [FileName ...]

部分作業、選項和自變數清單

Operations

catdb
設定 SignTool 以更新目錄資料庫。 SignTool 會將目錄檔案新增至資料庫,或從資料庫移除目錄。 根據預設,catdb 命令會將名稱由 FileName 自變數指定的檔案新增至系統元件 (driver) 資料庫。

注意

目錄資料庫用於自動查閱目錄檔案。

簽署
設定SignTool以數位方式簽署FileName自變數所指定名稱的檔案。

timestamp
將 SignTool 設定為時間戳,其名稱是由 FileName 自變數所指定的檔案。

verify
設定 SignTool 來驗證 FileName 自變數所指定之檔案的數位簽名。

Catdb 作業選項

/d
設定 SignTool 以更新目錄資料庫。 如果未使用 /d/g 選項,SignTool 會更新系統元件和驅動程序資料庫。

/g Guid
設定 SignTool 以更新 GUID 自變數所識別的目錄資料庫。

/r
將 SignTool 設定為從目錄資料庫移除每個目錄檔案,其名稱是由 FileName 自變數所指定。 如果未指定此選項,SignTool 會將指定的目錄檔案新增至目錄資料庫。

/u
將 SignTool 設定為在必要時產生目錄檔案的唯一名稱,以防止與目錄資料庫中現有的目錄檔案發生衝突。 如果未指定此選項,SignTool 會覆寫任何與所新增目錄同名的現有目錄。

簽署作業選項

/a 設定 SignTool 以自動選取最佳的簽署憑證。 如果此選項不存在,SignTool 預期只會找到一個簽署憑證。

/ac CrossCertFileName
指定與名稱為 CertificateName 之軟體發行者憑證 (SPC) 搭配使用的跨憑證檔案名稱,並安裝在證書存儲 StoreName 中。 只有在簽署憑證是 SPC 時,才應該使用此選項。

/c CertTemplateName
指定適用於簽署憑證的「憑證範本名稱」(Certificate Template Name),這是一個 Microsoft 擴充功能。

/csp CSPName
指定包含私密金鑰容器的密碼編譯服務提供者 (Cryptographic Service Provider,CSP)。

/d Desc
指定簽署內容的描述。

/du URL
指定已簽署內容之展開描述的 URL。

/f SignCertFile
指定檔案中的簽署憑證。 僅支持個人資訊交換 (PFX) 檔案格式。 您可以使用 Pvk2Pfx 工具,將 SPC 和 PVK 檔案轉換成 PFX 格式。

如果檔案採用受密碼保護的 PFX 格式,請使用 /p 選項來指定密碼。 如果檔案不包含私鑰,請使用 /csp/k 選項分別指定 CSP 和私鑰容器名稱。

/fd
指定要用於建立檔案簽章的檔案摘要演算法。 預設為 SHA1。

/i IssuerName
指定簽署憑證的簽發者名稱。 這個值可以是完整簽發者名稱的子字串。

/j DLL
指定提供簽章屬性的 DLL 名稱。

/jp ParameterName
指定傳遞至 /j 命令所指定 DLL 的參數

/kc PrivKeyContainerName
指定私鑰的金鑰容器名稱。

/n SubjectName
指定簽署憑證的主體名稱。 這個值可以是完整主體名稱的子字串。

/nph
如果支援,則隱藏可執行檔的頁面雜湊。 預設取決於 SIGNTOOL_PAGE_HASHES 環境變數和 wintrust.dll 版本。 若為非 PE 檔案,則會忽略這個選項。

/p 密碼
指定用來開啟 PFX 檔案的密碼 您可以使用 /f 選項來指定 PFX 檔案

/p7 路徑
指定為每個指定內容檔產生公開金鑰加密標準 (PKCS) #7 檔案。 PKCS #7 檔案的名稱為 path\filename.p7。

/p7ce
指定已簽署的 PKCS #7 內容的選項。 將 Value 設定為 "Embedded" 會將簽署內容內嵌在 PKCS #7 檔案中,設定為 "DetachedSignedData" 會產生已中斷連結的 PKCS #7 檔案的簽署資料部分。 如果未使用 /p7ce 選項,則預設會內嵌已簽署的內容。

/p7co OID
指定識別已簽署 PKCS #7 內容的物件識別項 (OID)。

/ph 如果支援,會產生可執行文件的頁面哈希。

/r RootSubjectName
指定簽署憑證必須鏈結的跟證書主體名稱。 這個值可以是完整根憑證主體名稱的子字串。

/s StoreName
指定要在搜尋要用於簽署檔案的憑證時開啟的證書儲存名稱。 如果未指定此選項, 則會開啟 [我的 證書存儲]。

/sha1 哈希
指定簽署憑證的 SHA1 雜湊。

/sm
將 SignTool 設定為使用電腦證書存儲,而不是使用者證書存儲。

/t URL
指定時間戳伺服器的 URL。 如果未提供此選項,則簽署的檔案不會有時間戳。 目錄檔案或驅動程式檔案應為時間戳,因為如果簽署者的密鑰遭到入侵,時間戳會提供撤銷用來簽署檔案之密鑰所需的資訊。

/td alg
與 /tr 選項搭配使用,以要求 RFC 3161 時間戳伺服器所使用的摘要演算法。

/tr URL
指定 RFC 3161 時間戳記伺服器的 URL。 如果這個選項 (或 /t) 不存在,則簽署的檔案將不會加上時間戳。 如果加上時間戳記失敗,便會產生警告。 此選項不能與 /t 選項搭配使用。

/u 使用量
指定在簽署憑證時必須存在的增強金鑰使用方法 (Enhanced Key Usage,EKU)。 使用方法的值可以利用 OID 或字串指定。 預設的使用方法為 "Code Signing" (1.3.6.1.5.5.7.3.3)。

/uw 指定「Windows 系統元件驗證」的使用方式(1.3.6.1.4.1.311.10.3.6)。

時間戳作業選項

/p7 時間戳 PKCS #7 檔案。

/t URL
指定時間戳伺服器的 URL。 先前必須簽署時間戳的檔案

/td alg
要求 RFC 3161 時間戳記伺服器使用的摘要演算法。 /td 會與 /tr 選項搭配使用。

/tp 索引
在 index 的簽章加上時間戳記。

/tr alg
要求 RFC 3161 時間戳記伺服器使用的摘要演算法。 /td 會與 /tr 選項搭配使用。

驗證作業選項

/一個
指定所有方法都可以用來驗證檔案。 首先會搜尋目錄資料庫,判斷檔案是否已在目錄中簽署。 如果檔案未在任何目錄中登入,SignTool 會嘗試驗證檔案的內嵌簽章。 驗證不一定已在目錄中簽署的檔案時,建議您採用這個選項。

/廣告
指定只搜尋預設目錄資料庫,以尋找檔案已登入的目錄。

/all
確認在包含多個簽章的檔案中的所有簽章。

/如
指定只搜尋系統元件 (驅動程式) 目錄資料庫,以尋找檔案已登入的目錄。

/ag CatDBGUID
指定只有透過 CatDBGUID 自變數識別的目錄資料庫會搜尋檔案已登入的目錄。

/c CatalogFileName
指定目錄檔案的名稱。

/d 指定簽署工具應該列印描述和描述 URL。

/ds 索引
驗證位於指定位置的簽章。

/hash {SHA1|SHA256}
指定在目錄中搜尋檔案時,要使用的選擇性雜湊演算法。

/kp
設定 SignTool 以確認 FileName 自變數所指定的每個檔案的數位簽名都符合內核模式程式代碼簽署原則,以及 Windows Vista 和更新版本的 Windows 的 PnP 裝置安裝簽署需求 如果未指定此選項,SignTool 只會驗證簽章是否符合 PnP 裝置安裝簽署需求。

/女士
使用多個驗證語意。 這是 Windows 8 和更新版本上 WinVerifyTrust 函式呼叫的預設行為

/o 版本
根據操作系統版本驗證檔案。 Version 自變數的格式PlatformID:VerMajor.VerMinor.BuildNumber

建議使用 /o 選項。 如果未 指定 /o,SignTool 可能會傳回非預期的結果。 例如,如果您未包含 /o 選項,在較舊的操作系統上正確驗證的系統類別目錄可能無法在較新的操作系統上正確驗證。

/p7
驗證 PKCS #7 檔案。 PKCS #7 驗證沒有使用任何現有的原則。 檢查簽章,並建置簽署憑證鏈結。

/pa
設定SignTool以確認 FileName 自變數所指定每個檔案的數位簽名符合 PnP 裝置安裝簽署需求

注意

此選項無法與 catdb 選項搭配使用。

/pg PolicyGUID
依 GUID 指定驗證原則。 PolicyGUID 會對應至驗證原則的 ActionID。

注意

此選項無法與 catdb 選項搭配使用。

/ph 指定簽署工具應該列印並驗證頁面哈希值。

/r RootSubjectName
指定簽署憑證必須鏈結的跟證書主體名稱。 這個值可以是完整根憑證主體名稱的子字串。

/tw
指定如果簽章沒有時間戳,就會產生警告。

一般選項

/q
設定SignTool,在成功執行時顯示沒有輸出,以及執行失敗的最小輸出。

/v
設定SignTool以顯示作業和警告訊息的詳細資訊版本。

/?
設定SignTool 以在命令視窗中顯示說明資訊。

檔名。。。
指定一或多個檔名的清單。 根據命令,SignTool 會簽署、時間戳或驗證指定的檔案。 如果使用 catdb 命令,SignTool 將會從目錄資料庫新增或移除指定的檔案。

針對符號時間戳驗證命令,檔案可以是驅動程式套件或驅動程式檔案的類別目錄檔案。

針對 catdb 命令,檔案必須是驅動程式套件的目錄檔案

備註

SignTool 支援大量選項。 本主題所述的選項僅限於您可以用來簽署或驗證驅動程式套件或驅動程式檔案的選項。

如需 SignTool 參數的完整清單,請參閱 Microsoft SignTool 網站。

如需簽署檔案的詳細資訊,請參閱 Microsoft 密碼編譯工具 網站。

32 位版本的 SignTool 位於 WDK 的 bin\i386 資料夾中。 工具的64位版本位於WDK的 bin\amd64 和 bin\ia64 資料夾中。

範例

以下是如何使用軟體發行者憑證 (SPC) 和對應的跨憑證簽署 驅動程式套件 類別目錄檔案的範例。 此範例適用於簽署 64 位版本的 Windows Vista 和更新版本的 Windows 驅動程式套件,以強制執行內核模式程式代碼簽署原則。 此範例會簽署驅動程式套件的目錄檔案 AbcCatFileName.cat。 為了簽署類別目錄檔案,此範例會使用跨憑證 AbcCrossCertificate 和 AbcSPCCertificate 憑證。 AbcSPCCertificate 憑證位於 AbcCertificateStore 證書存儲中。

此範例也會使用公開可用的時間戳伺服器來簽署目錄檔案。 時間戳伺服器是由 DigiCert 提供,其 URL 為 http://timestamp.digicert.com

SignTool sign /ac AbcCrossCertificate.cer /s AbcCertificateStore /n AbcSPCCertificate /t http://timestamp.digicert.com AbcCatFileName.cat

以下是如何使用 SPC 和跨憑證在驅動程式檔案中內嵌簽章的範例。 所有參數都與簽署目錄檔案的範例相同,不同之處在於已簽署的檔案AbcDriverFile.sys而不是目錄檔案 AbcCatFileName.cat。

SignTool sign /ac AbcCrossCertificate.cer /s AbcCertificateStore /n AbcSPCCertificate /t http://timestamp.digicert.com AbcDriverFile.sys

以下是如何使用商業發行憑證商業測試憑證簽署驅動程式套件目錄檔案的範例。 此範例適用於 32 位版本的 Windows Vista 和更新版本的 Windows 簽署驅動程式套件,但不會強制執行內核模式程式代碼簽署原則。 此範例會簽署驅動程式套件的目錄檔案 CatalogFileName.cat。 此範例會使用位於 TestCertificateStore 證書存儲中的 AbcTestCertificate 測試憑證來簽署類別目錄檔案。

此範例也會使用公開可用的時間戳伺服器來簽署目錄檔案。 時間戳伺服器是由 DigiCert 提供,其 URL 為 http://timestamp.digicert.com

SignTool sign /s TestCertificateStore /n AbcTestCertificate /t http://timestamp.digicert.com CatalogFileName.cat

驗證範例

以下範例說明如何確認驅動程式套件類別目錄檔案的章符合內核模式程式代碼簽署原則和 PnP 裝置安裝簽署需求。 此範例會驗證目錄檔案的簽章 AbcCatalogFile.cat。

SignTool verify /kp CatalogFileName.cat

下列範例說明如何確認驅動程式套件類別目錄中所列檔案的簽章符合內核模式程式代碼簽署原則和 PnP 裝置安裝簽署需求。 此範例會驗證 AbcDriverPackage.inf 檔案的簽章,該檔案在目錄檔案中必須有指紋專案 CatalogFileName.cat。

SignTool verify /kp /c CatalogFileName.cat AbcDriverPackage.inf

以下是如何確認內嵌簽章符合 Windows Vista 和更新版本的 Windows 核心模式程式代碼簽署原則的範例。 此範例會驗證內嵌在驅動程式檔案中的簽章AbcDriverFile.sys。

SignTool verify /kp AbcDriverFile.sys

以下是如何確認 驅動程式套件類別目錄檔案簽 章符合 PnP 裝置安裝簽署需求的範例。 此範例會驗證目錄檔案的簽章 CatalogFileName.cat。

SignTool verify /pa CatalogFileName.cat

將目錄檔案新增至系統元件 (驅動程式) 資料庫的範例

以下是如何使用 SignTool 將目錄檔案新增至系統元件 (driver) 資料庫的範例 CatalogFileName.cat。 /v 選項會將 SignTool 設定為以詳細資訊模式運作,而 /u 選項會將 SignTool 設定為在必要時為要新增的目錄檔案產生唯一名稱,以避免取代與 CatalogFileName.cat 同名的現有目錄檔案。

SignTool catdb /v /u CatalogFileName.cat