Share via


SignTool.exe (簽署工具)

更新:2011 年 4 月

簽署工具是一個命令列工具,能夠數位簽署檔案、驗證檔案中的簽章以及為檔案加上時間戳記。

這個工具會自動隨 Visual Studio 和 Windows SDK 一起安裝。 若要執行工具,建議您使用 Visual Studio 命令提示字元或 Windows SDK 命令提示字元。 這些公司可讓您輕鬆地執行工具,而不需瀏覽至安裝資料夾。 如需詳細資訊,請參閱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

要簽署之檔案的路徑。

簽署工具支援下列命令。 每個指令搭配一組獨特的選項使用,這些選項列於個別區段中。

命令

描述

catdb

在目錄資料庫中加入或移除目錄檔。 目錄資料庫可以用來自動查閱目錄檔,並且是由 GUID 所識別。 如需 catdb 命令所支援之選項的清單,請參閱 catdb 命令選項

sign

數位簽署檔案。 數位簽章可以防止檔案遭到篡改,而且可讓使用者根據簽署憑證確認簽署人。 如需 sign 命令所支援之選項的清單,請參閱 Sign 命令選項

Timestamp

為檔案加上時間戳記。 如需 TimeStamp 命令所支援之選項的清單,請參閱 TimeStamp 命令選項

Verify

藉由判斷簽署憑證是否由受信任的授權單位所發佈、簽署憑證是否已撤銷,以及簽署憑證是否為特定原則的有效憑證,來驗證檔案的數位簽章。 如需 Verify 命令所支援之選項的清單,請參閱 驗證命令選項

下列選項適用於所有簽署工具命令。

Global 選項

描述

/q

執行成功時沒有任何輸出,執行失敗時產生最少輸出。

/v

執行成功或失敗時所產生的輸出以及警告訊息,都顯示詳細資料。

catdb 命令選項

下表列出可以搭配 catdb 命令使用的選項。

Catdb 選項

描述

/d

指示預設目錄資料庫已經更新。 如果 /d 和 /g 選項都不使用,簽署工具就會更新系統元件和驅動程式資料庫。

/g GUID

指示由全域唯一識別項 GUID 所識別的目錄資料庫已經更新。

/r

從目錄資料庫移除指定的目錄。 如果沒有指定這個選項,簽署工具就會在目錄資料庫中加入指定的目錄。

/u

指定已為加入的目錄檔自動產生唯一的名稱。 必要時,目錄檔會重新命名,以避免與現有的目錄檔發生名稱衝突。 如果沒有指定這個選項,簽署工具會覆寫具有與所要加入之目錄相同名稱的所有現有目錄。

Sign 命令選項

下表列出可以搭配 sign 命令使用的選項。

Sign 命令選項

描述

/a

自動選取最佳的簽署憑證。 簽署工具會找到滿足所有指定條件的所有有效憑證,並且選取有效時間最長的一個。 如果沒有這個選項,簽署工具只需要找出一個有效的簽署憑證。

/ac file

從 file 新增其他憑證至簽章區塊。

/c CertTemplateName

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

/csp CSPName

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

/d Desc

指定簽署內容的描述。

/du URL

為已簽署的內容之擴充描述,指定統一資源定位器 (Uniform Resource Locator,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 RootSubjectName

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

/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

指定在簽署憑證時必須存在的增強金鑰使用方法 (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) 的使用方式。

TimeStamp 命令選項

下表列出可以搭配 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

根據作業系統版本驗證檔案。 Version 具有下列格式:PlatformID:VerMajor.VerMinor.BuildNumber

/pa

指定使用預設 Authentication 驗證原則。 如果未指定 /pa 選項,簽署工具便會使用「Windows 驅動程式驗證原則」(Windows Driver Verification Policy)。 這個選項無法與 catdb 選項搭配使用。

/pg PolicyGUID

依 GUID 指定驗證原則。 PolicyGUID 會對應至驗證原則的 ActionID。 這個選項無法與 catdb 選項搭配使用。

/ph

指定簽署工具應列印及驗證頁面雜湊值。

/r RootSubjectName

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

/tw

指定如果簽章未加上時間戳記,則應產生警告。

傳回值

簽署工具終止時會傳回下列其中一個結束代碼。

結束代碼

描述

0

執行成功。

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.verisgn/com/scripts.timstamp.dll MyFile.exe

下列命令會使用位於主旨名稱為 My Company Certificate 之 My 存放區中的憑證來簽署檔案。

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.verisgn/com/scripts.timstamp.dll MyFile.exe

下列命令會確認檔案是否已簽署。

signtool verify MyFile.exe

下列命令會驗證可能已在目錄中簽署的系統檔。

signtool verify /a SystemFile.dll

下列命令會驗證已在名為 MyCatalog.cat 之目錄中簽署的系統檔。

signtool verify /c MyCatalog.cat SystemFile.dll

請參閱

參考

Visual Studio 和 Windows SDK 命令提示字元

其他資源

.NET Framework 工具

變更記錄

日期

記錄

原因

2011 年 4 月

加入使用 Visual Studio 和 Windows SDK 命令提示字元的相關資訊。

資訊加強。

2010 年 5 月

重組;更新指令和選項。

客戶回函。