SignTool

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

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

作業、選項和引數的部分清單

Operations

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

注意

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

簽署
將 SignTool 設定為以數位方式簽署其名稱由 FileName 引數指定的檔案。

timestamp
設定 SignTool 以時間戳記 FileName 引數指定其名稱的檔案。

驗證
設定 SignTool 以驗證 FileName 引數所指定名稱之檔案的數位簽章。

Catdb 作業選項

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

/gGuid
設定 SignTool 以更新 GUID 引數所識別的目錄資料庫。

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

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

簽署作業選項

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

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

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

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

/dDesc
指定簽署內容的描述。

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

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

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

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

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

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

/jpParameterName
指定參數,這個參數會傳遞至 /j 命令所指定的 DLL。

/kcPrivKeyContainerName
指定私密金鑰的金鑰容器名稱。

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

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

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

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

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

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

/Ph 如果支援,則會產生可執行檔的頁面雜湊。

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

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

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

/Sm
設定 SignTool 以使用電腦憑證存放區,而不是使用者憑證存放區。

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

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

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

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

/微波 指定使用「Windows 系統元件驗證」 (1.3.6.1.4.1.311.10.3.6) 。

時間戳記作業選項

/p7 時間戳記 PKCS #7 檔案。

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

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

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

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

驗證作業選項

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

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

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

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

/agCatDBGUID
指定只搜尋透過 CatDBGUID 引數識別的目錄資料庫,並搜尋檔案已登入的目錄。

/cCatalogFileName
指定目錄檔案的名稱。

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

/dsindex
驗證位於指定位置的簽章。

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

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

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

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

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

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

/Pa
設定 SignTool 以確認 FileName 引數所指定每個檔案的數位簽章符合 PnP 裝置安裝簽署需求

注意

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

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

注意

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

/Ph 指定簽署工具應該列印並驗證頁面雜湊值。

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

/tw
指定如果簽章未設定時間戳記,就會產生警告。

一般選項

/q
設定 SignTool 在成功執行時不顯示任何輸出,以及失敗執行的最低輸出。

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

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

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

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

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

備註

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

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

如需簽署檔案的詳細資訊,請參閱 Microsoft Cryptography Tools 網站。

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 將類別目錄檔案 CatalogFileName.cat 新增至系統元件 (驅動程式) 資料庫的範例。 /v選項會設定 SignTool 以詳細資訊模式運作,而 /u選項會設定 SignTool 為新增的目錄檔案產生唯一名稱,如有必要,以避免取代與 CatalogFileName.cat 同名的現有類別目錄檔案。

SignTool catdb /v /u CatalogFileName.cat