SignTool

SignTool 是一種命令列工具,可數位簽署檔案、驗證檔案中的簽章,以及時間戳記檔案。 如需簽署檔案為何很重要的相關資訊,請參閱程式 代碼簽署簡介

此工具安裝在 Microsoft Windows 軟體發展工具組的 \Bin 資料夾中, (SDK) 安裝路徑,例如: C:\Program Files (x86) \Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe

SignTool 是 Windows SDK 的一部分,您可以從 Windows SDK下載。

注意

Windows 10 SDK、Windows 10 HLK、Windows 10 WDK 和 Windows 10 ADK 組建 20236 和更新版本需要您指定摘要演算法。 SignTool sign 命令需要檔案摘要演算法選項, /fd () ,而時間戳記摘要演算法選項分別 (/td) 簽署和時間戳記期間) 。

如果在 /fd 簽署期間未指定,如果在 /td 時間戳記期間未指定,則命令一開始會擲回警告、錯誤碼 0。 在較新版本的 SignTool 中,警告會變成錯誤。 我們建議使用 SHA256。 它被視為比業界的 SHA1 更安全。

語法

signtool [command] [options] [file_name | ...]

參數

引數 描述
command 四個命令之一,指定要在檔案上執行的作業: catdbsigntimestampverify 。 如需每個命令的描述,請參閱下一個表格。
options 修改命令的選項。 除了全域 /q/v 選項外,每個命令支援一組唯一的選項。
file_name 要簽署之檔案的路徑。

SignTool 支援下列命令:

命令 描述
catdb 在目錄資料庫中加入或移除目錄檔。 目錄資料庫可以用來自動查閱目錄檔,並且是由 GUID 所識別。 如需命令支援 catdb 的選項清單,請參閱 catdb 命令選項
sign 數位簽署檔案。 數位簽章可保護檔案免于竄改,並讓使用者根據簽署憑證來驗證簽署者。 如需命令支援 sign 的選項清單,請參閱 簽署命令選項
timestamp 時間戳記檔案。 如需命令支援 timestamp 的選項清單,請參閱 timestamp 命令選項
verify 驗證檔案的數位簽章。 判斷簽署憑證是否由信任的授權單位所簽發、簽署憑證是否已撤銷,以及選擇性地,簽署憑證是否對特定原則有效。 如需命令支援 verify 的選項清單,請參閱 驗證命令選項

下列選項適用于所有 SignTool 命令。

Global 選項 描述
/q 如果命令成功執行則不顯示任何輸出,如果命令失敗則顯示最少的輸出。
/v 不論命令執行成功或失敗,都顯示詳細資訊輸出,並顯示警告訊息。
/debug 顯示偵錯資訊。

Catdb 命令選項

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

Catdb 選項 描述
/d 指示預設目錄資料庫已經更新。 如果您沒有使用 /d/g ,SignTool 會更新系統元件和驅動程式資料庫。
/gGUID 指定 GUID 所識別的目錄資料庫已更新。
/r 從目錄資料庫移除指定的目錄。 如果未指定此選項,SignTool 會將指定的目錄新增至目錄資料庫。
/u 指定為加入的目錄檔自動產生一個唯一的名稱。 必要時,目錄檔會重新命名,以避免與現有的目錄檔發生名稱衝突。 如果未指定此選項,SignTool 會覆寫任何與指定目錄同名的現有目錄。

注意

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

Sign 命令選項

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

Sign 命令選項 描述
/a 自動選取最佳的簽署憑證。 SignTool 會尋找符合所有指定條件的所有有效憑證,並選取有效時間最長的憑證。 如果此選項不存在,SignTool 預期只會尋找一個有效的簽署憑證。
/acfile 將另一個憑證從 檔案 新增至簽章區塊。
/as 附加這個簽章。 如果沒有主要簽章存在,此簽章會改為成為主要簽章。
/cCertTemplateName 指定適用於簽署憑證的「憑證範本名稱」(Certificate Template Name),這是一個 Microsoft 擴充功能。
/cspCSPName 指定包含私密金鑰容器的密碼編譯服務提供者 (Cryptographic Service Provider,CSP)。
/dDesc 指定簽署內容的描述。
/dg路徑 產生要簽署的摘要和未簽署的 PKCS7 檔案。 輸出摘要和 PKCS7 檔案為< Path > \ < FileName.dig >< Path > \ < FileName.p7u >。 若要輸出額外的 XML 檔案,請使用 /dxml
/di路徑 將已簽署的摘要內嵌至未簽署的 PKCS7 檔案,以建立簽章。 輸入帶正負號的摘要和未簽署的 PKCS7 檔案應該是< Path > \ < FileName.dig.signed 和 Path\FileName.p7u >> 。 <><
/dlibDll 指定實作 AuthenticodeDigestSign 函式以簽署摘要的 DLL。 此選項相當於將 SignTool 與 、 /ds/di 選項分開 /dg 使用。 此選項會將這三個全部叫用為一個不可部分完成的作業。
/dmdfFilename 搭配 選項使用 /dg 時,請將檔案的內容傳遞至函式, AuthenticodeDigestSign 而不需修改。
/ds 只簽署摘要。 輸入檔應該是 選項所產生的 /dg 摘要。 輸出檔案為:< File.signed >
/duURL 為已簽署的內容之擴充描述指定統一資源定位器 (Uniform Resource Locator,URL)。
/dxml 搭配 選項使用 /dg 時,會產生 XML 檔案。 輸出檔案為:< Path > \ < FileName > .dig.xml
/fSignCertFile 指定檔案中的簽署憑證。 如果檔案為「個人資訊交換」(PFX) 格式並且受密碼保護,請使用 /p 選項指定密碼。 如果檔案不包含私密金鑰,請使用 /csp/kc 選項來指定 CSP 和私密金鑰容器名稱。
/fdalg 指定要用於建立檔案簽章的檔案摘要演算法。 注意:如果在 /fd 簽署時未指定 選項,命令會產生錯誤。
/fd certHash 指定字串 「certHash」 會導致命令使用簽署憑證上指定的演算法。 注意:如果在 /fd 簽署時未指定 選項,命令會產生錯誤。
/iIssuerName 指定簽署憑證的簽發者名稱。 這個值可以是完整簽發者名稱的子字串。
/kcPrivKeyContainerName 指定私密金鑰容器名稱。
/nSubjectName 指定簽署憑證的主體名稱。 這個值可以是完整主體名稱的子字串。
/nph 如果支援,則隱藏可執行檔的頁面雜湊。 預設值取決於 SIGNTOOL_PAGE_HASHES 環境變數和 wintrust.dll 版本。 若為非 PE 檔案,則會忽略這個選項。
/pPassword 指定用來開啟 PFX 檔案的密碼 /f使用 選項來指定 PFX 檔案。
/p7路徑 指定為每個指定內容檔產生公開金鑰加密標準 (PKCS) #7 檔案。 PKCS #7 檔案的名稱為< path > \ < filename.p7 >
/p7ceValue 指定已簽署的 PKCS #7 內容的選項。 將 [值 ] 設定為 , Embedded 將已簽署的內容內嵌在 PKCS #7 檔案中,或設定為 DetachedSignedData ,以產生已卸離 PKCS #7 檔案的已簽署資料部分。 /p7ce如果未指定選項,則預設會內嵌已簽署的內容。
/p7co<OID> 指定識別已簽署 PKCS #7 內容的物件識別項 (OID)。
/ph 如果支援,則產生可執行檔的頁面雜湊。
/rRootSubjectName 指定簽署憑證必須鏈結之根憑證的主體名稱。 這個值可以是完整根憑證主體名稱的子字串。
/sStoreName 指定要在命令搜尋憑證時開啟的存放區。 如果未指定此選項,命令會開啟 My 存放區。
/sha1Hash 指定簽署憑證的 SHA1 雜湊。 當多個憑證符合其餘選項所指定的準則時,通常會使用 SHA1 雜湊。
/sm 指定命令使用電腦存放區,而不是使用者存放區。
/tURL 指定時間戳記伺服器的 URL。 如果未指定此選項或 /tr ,則簽署的檔案不會時間戳記。 如果時間戳記失敗,命令會產生警告。 此選項無法與 選項搭配 /tr 使用。
/tdalg /tr 選項一起使用以要求 RFC 3161 時間戳記伺服器使用的摘要演算法。 注意:如果在 /td 時間戳記時未指定 ,命令會產生錯誤。
/trURL 指定 RFC 3161 時間戳記伺服器的 URL。 如果未指定此選項或 /t ,則簽署的檔案不會時間戳記。 如果時間戳記失敗,命令會產生警告。 此選項無法與 選項搭配 /t 使用。
/uUsage 指定在簽署憑證時必須存在的增強金鑰使用方法 (Enhanced Key Usage,EKU)。 使用方法的值可以利用 OID 或字串指定。 預設使用方式為 Code Signing1.3.6.1.5.5.7.3.3
/uw 指定 或 1.3.6.1.4.1.311.10.3.6 的使用方式 Windows System Component Verification

如需使用方式範例,請參閱使用 SignTool 簽署檔案

時間戳記命令選項

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

時間戳記選項 描述
/p7 為 PKCS #7 檔案加上時間戳記。
/tURL 指定時間戳記伺服器的 URL。 要加上時間戳記的檔案必須先經過簽署。 必須有 /t/tr 任一選項。
/tdalg /tr 選項一起使用以要求 RFC 3161 時間戳記伺服器使用的摘要演算法。 注意:如果在 /td 時間戳記時未指定 ,命令會產生警告。
/tpindex index 的簽章加上時間戳記。
/trURL 指定 RFC 3161 時間戳記伺服器的 URL。 要加上時間戳記的檔案必須先經過簽署。 必須有 /tr/t 任一選項。

驗證命令選項

Verify 選項 描述
/a 指定所有方法都可以用來驗證檔案。 首先,SignTool 會搜尋目錄資料庫,以判斷檔案是否已登入目錄。 如果檔案未登入任何類別目錄,SignTool 會嘗試驗證檔案的內嵌簽章。 當驗證可能或可能未登入目錄中的檔案時,建議您使用此選項。 可能或可能未簽署的檔案範例包括 Windows 檔案或驅動程式。
/ad 使用預設目錄資料庫尋找目錄。
/all 使用多個簽章來驗證檔案中的所有簽章。
/as 使用系統元件 (驅動程式) 目錄資料庫尋找目錄。
/agCatDBGUID 在 GUID 所識別的目錄資料庫中尋找目錄。
/cCatFile 依名稱指定目錄檔。
/d 列印描述和描述 URL。 Windows Vista 和更早版本:不支援此選項。
/dsIndex 驗證特定位置的簽章。
/hash{SHA1|SHA256} 指定在目錄中搜尋檔案時,要使用的選擇性雜湊演算法。
/kp 使用 x64 核心模式驅動程式簽署原則來執行驗證。
/ms 使用多個驗證語意。 此行為是 WinVerifyTrust 呼叫的預設值。
/oVersion 根據作業系統版本驗證檔案。 version 參數的格式為: < PlatformID > : < VerMajor > 。 <VerMinor > 。 <BuildNumber >。 我們建議使用 /o 選項。 如果未 /o 指定,SignTool 可能會傳回非預期的結果。 例如,如果您未包含 /o ,則在較舊的作業系統上正確驗證的系統類別目錄可能無法在較新的作業系統上正確驗證。
/p7 驗證 PKCS #7 檔案。 PKCS #7 驗證沒有使用任何現有的原則。 SignTool 會檢查簽章,並建置簽署憑證的鏈結。
/pa 指定使用預設驗證驗證原則。 /pa如果未指定此選項,SignTool 會使用 Windows 驅動程式驗證原則。 此選項無法與選項搭配 catdb 使用。
/pgPolicyGUID 依 GUID 指定驗證原則。 GUID 對應至 ActionID 驗證原則的 。 此選項無法與選項搭配 catdb 使用。
/ph 列印並驗證頁面雜湊值。 Windows Vista 和更早版本:不支援此選項。
/rRootSubjectName 指定簽署憑證必須鏈結之根憑證的主體名稱。 這個值可以是完整根憑證主體名稱的子字串。
/tw 指定如果簽章未加時間戳記,命令就會產生警告。

SignTool verify 命令會判斷簽署憑證是否由受信任的授權單位發行、簽署憑證是否已撤銷,以及選擇性地,簽署憑證是否對特定原則有效。

除非指定選項來搜尋目錄,例如 /a/ad/as/ag/c ,否則 SignTool verify 命令會輸出內嵌簽章狀態。

傳回值

SignTool 會在終止時傳回下列其中一個結束代碼。

結束碼 描述
0 執行成功。
1 執行失敗。
2 執行已完成,但出現警告。

範例

下列命令會將目錄檔案 MyCatalogFileName.cat 新增至系統元件和驅動程式資料庫。 /u如有必要,此選項會產生唯一的名稱,以避免取代名為MyCatalogFileName.cat的現有目錄檔案。

signtool catdb /v /u MyCatalogFileName.cat

下列命令會使用最佳憑證自動簽署檔案。

signtool sign /a /fd SHA256 MyFile.exe 

下列命令使用儲存在受密碼保護之 PFX 檔中的憑證存放區,對檔案進行數位簽署。

signtool sign /f MyCert.pfx /p MyPassword /fd SHA256 MyFile.exe 

下列命令會以數位方式簽署和時間戳記檔案。 用於簽署檔案的憑證存放在 PFX 檔中。

signtool sign /f MyCert.pfx /t http://timestamp.digicert.com /fd SHA256 MyFile.exe 

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

signtool sign /n "My Company Certificate" /fd SHA256 MyFile.exe 

下列命令會簽署 ActiveX 控制項,並在提示使用者安裝控制項時,提供在瀏覽器中顯示的資訊。

signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html /fd SHA256 MyControl.exe 

下列命令時間戳記已數位簽署的檔案。

signtool timestamp /t http://timestamp.digicert.com MyFile.exe

下列命令時間戳記會使用 RFC 3161 時間戳記伺服器來標記檔案。

signtool timestamp /tr http://timestamp.digicert.com /td SHA256 MyFile.exe

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

signtool verify MyFile.exe

下列命令會驗證可在目錄中登入的系統檔案。

signtool verify /a SystemFile.dll

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

signtool verify /c MyCatalog.cat SystemFile.dll