簽名工具 SignTool.exe
.NET Framework 4.5
簽名工具是一個指令行工具,用于對檔案進行數字簽名,驗證檔案和時間戳檔案中的簽名。
安裝 Visual Studio 和 Windows SDK 時會自動安裝此工具。要運作工具,我們建議您使用 Visual Studio 指令提示符或 Windows SDK 指令提示符(也稱 CMD Shell)。您可以使用這些實用程式輕松運作工具,而不需要導航到安裝檔案夾。有關更多資訊,請參見Visual Studio 和 Windows SDK 指令提示。
-
如果您的計算機上已安裝了 Visual Studio:在工作列上依次單擊 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。
- 或 -
如果您的計算機上已安裝了 Windows SDK:在工作列上依次單擊 Start、All Programs、Windows SDK 檔案夾和Command Prompt(或CMD Shell)。
- 在指令提示處,鍵入下列指令:
signtool [command] [options] [file_name | ...]
參數
參數 | 說明 |
---|---|
command | 指定要對檔案執行的操作的四個指令之一(catdb、sign、Timestamp 或Verify)。對每個指令的描述請參見下一個表。 |
options | 用于修改指令的選項。 除了全局/q 和/v 選項之外,每個指令均支援一組唯一選項。 |
file_name | 要進行簽名的檔案的路徑。 |
簽名工具支援下列指令。 每個指令使用不同的選項集,這些選項集被列在它們相應的節中。
Command | 說明 |
---|---|
catdb | 在目錄資料庫中添加或移除目錄檔案。 目錄資料庫用于自動查找目錄檔案,并由 GUID 辨別。有關catdb 指令支援的選項的清單,請參見catdb 指令行選項。 |
sign | 對檔案進行數字簽名。 數字簽名可以避免檔案被篡改,并且基于簽名證書使使用者能夠驗證簽名者。有關sign 指令支援的選項的清單,請參見簽名指令選項。 |
Timestamp | 時間戳檔案。 有關TimeStamp 指令支援的選項的清單,請參見時間戳指令選項。 |
Verify | 通過确定簽名證書是否由受信任的頒發機構、是否已撤消了簽名證書,以及簽名證書對于特定政策是否有效(此項可選)驗證檔案的數字簽名。有關Verify 指令支援的選項的清單,請參見驗證指令選項。 |
下列選項适用于所有簽名工具指令。
全局選項 | 說明 |
---|---|
/q | 執行成功時不生成輸出,執行失敗時生成最少的輸出。 |
/v | 執行成功、執行失敗或産生警告消息時生成詳細輸出。 |
catdb 指令行選項
下表列出了可用于 catdb 指令的選項。
Catdb 選項 | 說明 |
---|---|
/d | 指定更新預設目錄資料庫。 如果/d和/g 選項都未使用,則簽名工具更新系統元件和驅動程式資料庫。 |
/gGUID | 指定更新由全局唯一辨別符 (GUID) 辨別的目錄資料庫。 |
/r | 從目錄資料庫中移除指定的目錄。 如果未指定該選項,“簽名工具”将向目錄資料庫添加指定的目錄。 |
/u | 指定為添加的目錄檔案自動生成唯一的名稱。 如有必要,重命名目錄檔案,以避免與現有的目錄檔案發生沖突。如果未指定該選項,簽名工具将覆寫與所添加的目錄同名的任何現有目錄。 |
簽名指令選項
下表列出了可用于 sign 指令的選項。
簽名指令選項 | 說明 |
---|---|
/a | 自動選擇最佳的簽名證書。 簽名工具将查找滿足所有指定條件的所有有效的證書,并選擇有效時間最長的一個。如果未指定該選項,簽名工具僅查找一個有效的簽名證書。 |
/ac 檔案 | 将檔案中的其他證書添加到簽名塊。 |
/c CertTemplateName | 指定用于對證書進行簽名的證書模闆名(一個 Microsoft 擴充)。 |
/csp CSPName | 指定包含私鑰容器的加密服務提供程式 (CSP)。 |
/d Desc | 指定已簽名内容的說明。 |
/du URL | 為已簽名文檔的詳細說明指定統一資源定位器 (URL)。 |
/f SignCertFile | 指定檔案中的簽名證書。 如果檔案是個人資訊交換 (PFX) 格式且受密碼保護,則使用/p 選項來指定密碼。如果檔案不包含私鑰,則使用/csp 和/k 選項指定 CSP 和私鑰容器名。 |
/fd | 指定将用于建立檔案簽名的檔案摘要算法。 預設值為 SHA1。 |
/i IssuerName | 指定簽名證書的頒發者的名稱。 該值可以是整個頒發者名稱的子字元串。 |
/kc PrivKeyContainerName | 指定私鑰容器名。 |
/n SubjectName | 指定簽名證書的主體的名稱。 該值可以是整個主體名稱的子字元串。 |
/nph | 如果支援,為可執行檔案取消頁面的哈希。 預設值由 SIGNTOOL_PAGE_HASHES 環境變量和 wintrust.dll 版本決定。 |
/p Password(密碼) | 指定打開 PFX 檔案時使用的密碼。 (使用/f 選項指定 PFX 檔案。) |
/ph | 如果支援,則生成執行檔案的頁面哈希。 |
/r 根主題名稱 | 指定簽名證書必須連結到的根證書的主體名稱。 該值可以是根證書的整個主題名稱的子字元串。 |
/s StoreName | 指定要在搜尋證書時打開的存儲區。 如果未指定該選項,則打開My 存儲。 |
/sha1 Hash(哈希) | 指定簽名證書的 SHA1 哈希。 |
/sm | 指定使用一個計算機存儲區,而不是使用使用者存儲區。 |
/t URL | 指定時間戳伺服器的 URL。 如果該選項(或/tr)不存在,将不會對簽名檔案執行時間戳操作。如果時間戳操作失敗,将生成一個警告。此選項不能與/tr 選項一起使用。 |
/td alg | 與 /tr 選項一起使用,以請求 RFC 3161 時間戳伺服器使用的摘要算法。 |
/tr URL | 指定 RFC 3161 時間戳伺服器的 URL。 如果該選項(或/t)不存在,将不會對簽名檔案執行時間戳操作。如果時間戳操作失敗,将生成一個警告。此選項不能與/t 選項一起使用。 |
/u Usage(用法) | 指定簽名證書中必須存在的增強型密鑰用法 (EKU)。 可以通過 OID 或字元串指定該用法的值。預設用法為“代碼簽名”(1.3.6.1.5.5.7.3.3)。 |
/uw | 指定“Windows 系統元件驗證”(1.3.6.1.4.1.311.10.3.6)的使用情況。 |
時間戳指令選項
下表列出了可用于 TimeStamp 指令的選項。
TimeStamp 選項 | 說明 |
---|---|
/t URL | 指定時間戳伺服器的 URL。 要執行時間戳操作的檔案必須在以前已經進行了簽名。需要/t 或/tr 選項。 |
/td alg | 請求 RFC 3161 時間戳伺服器使用的摘要算法。 /td與/tr 選項一起使用。 |
/tr URL | 指定 RFC 3161 時間戳伺服器的 URL。 要執行時間戳操作的檔案必須在以前已經進行了簽名。需要/tr 或/t 選項。 |
驗證指令選項
驗證選項 | 說明 |
---|---|
/a | 指定可以使用所有方法來驗證檔案。 首先,搜尋目錄資料庫以确定是否在目錄中對檔案進行了簽名。如果未在任何目錄中對檔案進行簽名,簽名工具将嘗試驗證檔案的嵌入簽名。驗證可以或不能在目錄中進行簽名的檔案時,建議使用該選項。這些檔案的示例包括 Windows 檔案或驅動程式。 |
/ad | 使用預設的目錄資料庫查找目錄。 |
/as | 使用系統元件(驅動程式)目錄資料庫查找目錄。 |
/ag CatDBGUID | 在目錄資料庫中通過 CatDBGUID 辨別查找目錄。 |
/c CatFile | 通過名稱指定目錄檔案。 |
/d | 說明簽名工具應列印描述和描述的 URL。 |
/kp | 指定應使用核心模式驅動程式簽名政策進行驗證。 |
/o Version(版本) | 通過作業系統版本驗證檔案。 版本具有如下格式:PlatformID:VerMajor.VerMinor.BuildNumber |
/pa | 說明應使用預設認證碼驗證政策。 如果未指定/pa 選項,“簽名工具”将使用 “Windows 驅動程式驗證政策”。此選項不能與catdb 選項一起使用。 |
/pg PolicyGUID | 通過 GUID 指定驗證政策。 PolicyGUID 對應于驗證政策的 ActionID。此選項不能與catdb 選項一起使用。 |
/ph | 說明簽名工具應列印并驗證頁數哈希值。 |
/rRootSubjectName | 指定簽名證書必須連結到的根證書的主體名稱。 該值可以是根證書的整個主題名稱的子字元串。 |
/tw | 如果簽名沒有時間戳,則指定應該生成的一個警告。 |
傳回值
當其終止時,簽名工具傳回以下的退出代碼之一。
退出代碼 | 說明 |
---|---|
執行成功。 | |
1 | 執行失敗。 |
2 | 執行伴随着警告完成。 |
示例
以下指令将目錄檔案 MyCatalogFileName.cat 添加到系統元件和驅動程式資料庫中。如有防止替換現有的名稱為MyCatalogFileName.cat 的目錄檔案的必要,/v 選項會生成唯一的名稱。
signtool catdb /v /u MyCatalogFileName.cat
以下指令通過使用最佳證書對檔案進行自動簽名。
signtool sign /a MyFile.exe
以下指令使用存儲在密碼保護 PFX 檔案中的證書對檔案進行數字簽名。
signtool sign /f MyCert.pfx /p MyPassword MyFile.exe
以下指令對檔案進行數字簽名并加蓋時間戳。用于檔案簽名的證書存儲在 PFX 檔案中。
signtool sign /f MyCert.pfx /t http://timestamp.verisign.com/scripts/timstamp.dll MyFile.exe
以下指令通過使用位于 My 存儲區的證書對檔案進行簽名,其主題名稱為My Company Certificate。
signtool sign /n "My Company Certificate" MyFile.exe
以下指令對 ActiveX 控件進行簽名,并提供提示使用者安裝控制時由 Internet Explorer 顯示的資訊。
Signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html MyControl.exe
以下指令對以數字簽名過的檔案加蓋時間戳。
signtool timestamp /t http://timestamp.verisign.com/scripts/timstamp.dll MyFile.exe
以下指令驗證已經簽名的檔案。
signtool verify MyFile.exe
以下指令驗證可能已經在目錄中簽過名的系統檔案。
signtool verify /a SystemFile.dll
以下指令驗證在名為 MyCatalog.cat 目錄中已簽字的系統檔案。
signtool verify /c MyCatalog.cat SystemFile.dll
文章來自 http://msdn.microsoft.com/zh-cn/library/vstudio/8s9b9yaz.aspx