OpenSSL

密碼學和 SSL/TLS 工具包

openssl-ts

名稱

openssl-ts - 時間戳記授權命令

語法

openssl ts -help

openssl ts -query [-config configfile] [-data file_to_hash] [-digest digest_bytes] [-digest] [-tspolicy object_id] [-no_nonce] [-cert] [-in request.tsq] [-out request.tsq] [-text] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq]

openssl ts -reply [-config configfile] [-section tsa_section] [-queryfile request.tsq] [-passin password_src] [-signer tsa_cert.pem] [-inkey filename|uri] [-digest] [-chain certs_file.pem] [-tspolicy object_id] [-in response.tsr] [-token_in] [-out response.tsr] [-token_out] [-text] [-engine id] [-provider name] [-provider-path path] [-propquery propq]

openssl ts -verify [-data file_to_hash] [-digest digest_bytes] [-queryfile request.tsq] [-in response.tsr] [-token_in] [-untrusted files|uris] [-CAfile file] [-CApath dir] [-CAstore uri] [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] [-provider name] [-provider-path path] [-propquery propq]

說明

此命令是基本時間戳記授權 (TSA) 伺服器和用戶端應用程式,如 RFC 3161 (時間戳記通訊協定,TSP) 所指定。TSA 可以是 PKI 部署的一部分,其角色是提供特定資料在特定時間之前存在的長期證明。以下是通訊協定的簡要說明

  1. TSA 用戶端會為資料檔案計算單向雜湊值,並將雜湊值傳送給 TSA。

  2. TSA 會將目前日期和時間附加到收到的雜湊值,對其進行簽章,並將時間戳記代幣傳送回用戶端。透過建立此代幣,TSA 證明原始資料檔案在回應產生時存在。

  3. TSA 用戶端會收到時間戳記代幣,並驗證其上的簽章。它也會檢查代幣是否包含它傳送給 TSA 的相同雜湊值。

有一個 DER 編碼通訊協定資料單位定義為將時間戳記要求傳輸到 TSA,另一個定義為將時間戳記回應傳送回用戶端。此命令有三個主要功能:根據資料檔案建立時間戳記要求、根據要求建立時間戳記回應、驗證回應是否對應到特定要求或資料檔案。

目前還不支援透過 HTTP 或 TCP 自動傳送要求/回應,如 RFC 3161 所建議。使用者必須透過 ftp 或電子郵件傳送要求。

選項

-help

列印用法訊息。

-query

產生 TS 查詢。有關詳細資料,請參閱 "時間戳記要求產生"

-reply

產生 TS 回應。有關詳細資料,請參閱 "時間戳記回應產生"

-verify

驗證 TS 回應。有關詳細資料,請參閱 "時間戳記回應驗證"

時間戳記要求產生

-query 命令可用於建立並列印時間戳記要求,並具有下列選項

-config configfile

要使用的組態檔。選用;有關預設值的說明,請參閱 "openssl(1) 中的 COMMAND SUMMARY"

-data file_to_hash

需要建立時間戳記要求的資料檔。如果未指定 -data-digest 參數,則 stdin 為預設值。(選用)

-digest digest_bytes

可以明確指定訊息印記,而無需資料檔。印記必須以十六進位格式指定,每個位元組兩個字元,位元組可選擇用冒號分隔(例如 1A:F6:01:... 或 1AF601...)。位元組數目必須與使用的訊息摘要演算法相符。(選用)

-digest

要套用至資料檔的訊息摘要。可以使用 openssl-dgst(1) 命令支援的任何摘要。預設值為 SHA-256。(選用)

-tspolicy object_id

客戶端預期 TSA 用於建立時間戳記權杖的政策。可以使用組態檔中定義的點狀 OID 標記法或 OID 名稱。如果未要求政策,TSA 將使用其自己的預設政策。(選用)

-no_nonce

如果提供此選項,則要求中未指定 nonce。否則,要求中會包含 64 位元長的偽亂數 nonce。建議使用 nonce 以防範重播攻擊。(選用)

-cert

預期 TSA 在回應中包含其簽章憑證。(選用)

-in request.tsq

此選項指定先前建立的 DER 格式時間戳記要求,該要求將列印至輸出檔。當您需要以人類可讀格式檢查要求的內容時,這很有用。(選用)

-out request.tsq

將寫入要求的輸出檔名稱。預設值為 stdout。(選用)

-text

如果指定此選項,輸出將是人類可讀的文字格式,而非 DER。(選用)

-rand 檔案, -writerand 檔案

請參閱 openssl(1) 中的「隨機狀態選項」 以取得詳細資訊。

時間戳記回應產生

時間戳記回應(TimeStampResp)包含回應狀態和時間戳記代幣本身(ContentInfo),如果代幣產生成功的話。-reply 命令用於根據要求建立時間戳記回應或時間戳記代幣,並以人類可讀的格式列印回應/代幣。如果未指定 -token_out,輸出將永遠是時間戳記回應(TimeStampResp),否則會是時間戳記代幣(ContentInfo)。

-config configfile

要使用的組態檔。選用;有關預設值的說明,請參閱 openssl(1) 中的「命令摘要」。請參閱 「組態檔選項」 以取得可組態變數。

-section tsa_section

包含回應產生設定的組態檔區段名稱。如果未指定,將使用預設 TSA 區段,請參閱 「組態檔選項」 以取得詳細資訊。(選用)

-queryfile request.tsq

包含 DER 編碼時間戳記要求的檔案名稱。(選用)

-passin password_src

指定 TSA 私密金鑰的密碼來源。請參閱 openssl(1) 中的說明。(選用)

-signer tsa_cert.pem

TSA 的 PEM 格式簽署者憑證。TSA 簽署憑證必須有指定一個延伸金鑰用途:時間戳記。延伸金鑰用途也必須是必要的,否則將拒絕該憑證。覆寫組態檔的 signer_cert 變數。(選用)

-inkey 檔名|uri

TSA 的 PEM 格式簽署者私密金鑰。覆寫組態檔的 signer_key 選項。(選用)

-digest

要使用的簽署摘要。覆寫組態檔的 signer_digest 選項。(除非在組態檔中指定,否則為強制性)

-chain certs_file.pem

如果要求使用 -cert 選項,除了簽署者憑證之外,PEM 格式中所有憑證的集合都將包含在回應中。此檔案應包含從其發行者向上的簽署者憑證憑證鏈。-reply 命令不會自動建立憑證鏈。(選用)

-tspolicy object_id

除非用戶端明確要求特定 TSA 政策,否則用於回應的預設政策。OID 可用點狀符號表示法或名稱指定。覆寫default_policy組態檔選項。(選用)

-in response.tsr

指定先前建立的時間戳記回應或時間戳記權杖(如果也指定 -token_in)以 DER 格式寫入輸出檔案。此選項不需要要求,例如在需要檢查回應或權杖的內容,或想要從回應中萃取時間戳記權杖時,會很有用。如果輸入是權杖,而輸出是時間戳記回應,則會將預設的「已授予」狀態資訊新增至權杖。(選用)

-token_in

此旗標可與 -in 選項一起使用,並指出輸入是 DER 編碼的時間戳記權杖(ContentInfo),而不是時間戳記回應(TimeStampResp)。(選用)

-out response.tsr

回應寫入此檔案。檔案的格式和內容取決於其他選項(請參閱 -text-token_out)。預設值為 stdout。(選用)

-token_out

輸出是時間戳記權杖(ContentInfo),而不是時間戳記回應(TimeStampResp)。(選用)

-text

如果指定此選項,輸出將是人類可讀的文字格式,而非 DER。(選用)

-engine id

請參閱 openssl(1) 中的「引擎選項」。此選項已棄用。

-provider name
-provider-path path
-propquery propq

請參閱 openssl(1) 中的「提供者選項」provider(7)property(7)

時間戳記回應驗證

-verify 命令用於驗證時間戳記回應或時間戳記權杖是否有效,並與特定時間戳記要求或資料檔相符。-verify 命令不使用組態檔。

-data file_to_hash

必須針對 file_to_hash 驗證回應或權杖。檔案會使用權杖中指定的訊息摘要演算法進行雜湊。不能與此選項一起指定 -digest-queryfile 選項。(選用)

-digest digest_bytes

必須針對使用此選項指定的訊息摘要驗證回應或權杖。位元組數目必須與權杖中指定的訊息摘要演算法相符。不能與此選項一起指定 -data-queryfile 選項。(選用)

-queryfile request.tsq

DER 格式的原始時間戳記要求。不能與此選項一起指定 -data-digest 選項。(選用)

-in response.tsr

需要驗證的 DER 格式時間戳記回應。(強制)

-token_in

此旗標可與 -in 選項一起使用,並指出輸入是 DER 編碼的時間戳記權杖(ContentInfo),而不是時間戳記回應(TimeStampResp)。(選用)

-untrusted files|uris

建立 TSA 簽署憑證的憑證鏈時可能需要的其他不受信任憑證組。這些憑證不需要包含 TSA 簽署憑證和中階 CA 憑證,因為回應已包含這些憑證。(選用)

可以提供多個來源,用逗號和/或空白分隔。每個檔案可能包含多個憑證。

-CAfile file-CApath dir-CAstore uri

有關詳細資訊,請參閱 openssl-verification-options(1) 中的「受信任憑證選項」。至少必須指定 -CAfile-CApath-CAstore 之一。

-allow_proxy_certs-attime-no_check_time-check_ss_sig-crl_check-crl_check_all-explicit_policy-extended_crl-ignore_critical-inhibit_any-inhibit_map-no_alt_chains-partial_chain-policy-policy_check-policy_print-purpose-suiteB_128-suiteB_128_only-suiteB_192-trusted_first-use_deltas-auth_level-verify_depth-verify_email-verify_hostname-verify_ip-verify_name-x509_strict -issuer_checks

設定憑證鏈驗證的各種選項。有關詳細資訊,請參閱 openssl-verification-options(1) 中的「驗證選項」

任何驗證錯誤都會導致命令退出。

組態檔選項

-query-reply 命令會使用組態檔。有關組態檔語法的概略說明,請參閱 config(5)-query 命令只會使用符號 OID 名稱區段,而且可以在沒有這個區段的情況下運作。然而,-reply 命令需要組態檔才能運作。

當變數有等效的命令列開關時,開關會永遠覆寫組態檔中的設定。

tsa 區段、default_tsa

這是主要區段,而且會指定包含 -reply 命令所有選項的另一個區段名稱。這個預設區段可以用 -section 命令列開關覆寫。(選用)

oid_file

這會指定包含額外 物件識別碼的檔案。檔案的每一行都應該包含物件識別碼的數字形式,後面接著空白、簡短名稱,再接著空白和最後的長名稱。(選用)

oid_section

這會指定組態檔中包含額外物件識別碼的區段。每一行都應該包含物件識別碼的簡短名稱,後面接著 = 和數字形式。使用這個選項時,簡短名稱和長名稱相同。(選用)

RANDFILE

在啟動時,指定的檔案會載入亂數產生器,而且在結束時會寫入 256 個位元組到這個檔案。(注意:不再需要使用 RANDFILE,請參閱 「歷史記錄」 區段。

serial

包含所建立的最後時間戳記回應的十六進位序號的檔案名稱。這個數字會隨著每個回應增加 1。如果在產生回應時檔案不存在,就會建立一個序號為 1 的新檔案。(強制性)

crypto_device

指定會設定為所有可用演算法預設值 OpenSSL 引擎。預設值是內建的,您可以指定 OpenSSL 支援的任何其他引擎(例如,使用 chil 代表 NCipher HSM)。(選用)

簽署者憑證

PEM 格式的 TSA 簽署憑證。與 -signer 命令列選項相同。(選用)

憑證

包含一組需要包含在回應中的 PEM 編碼憑證的檔案。與 -chain 命令列選項相同。(選用)

簽署者金鑰

PEM 格式的 TSA 私密金鑰。與 -inkey 命令列選項相同。(選用)

簽署者摘要

要使用的簽署摘要。與 -digest 命令列選項相同。(除非在命令列中指定,否則為強制性)

預設政策

當要求未強制執行任何政策時要使用的預設政策。與 -tspolicy 命令列選項相同。(選用)

其他政策

TSA 也可接受的政策的逗號分隔清單,且僅在要求明確指定其中一項時使用。(選用)

摘要

TSA 接受的訊息摘要演算法清單。至少必須指定一種演算法。(強制性)

準確度

TSA 時間來源的準確度,以秒、毫秒和微秒為單位。例如,秒:1,毫秒:500,微秒:100。如果缺少任何組成部分,則假設該欄位為零。(選用)

時脈精確度位數

指定需要包含在時間欄位中、代表秒數小數部分的最大位數。必須從時間中移除尾數零,因此實際上可能會有較少的位數,或根本沒有秒數小數部分。僅在 UNIX 平台上支援。最大值為 6,預設值為 0。(選用)

排序

如果此選項為「是」,則此 TSA 所產生的回應永遠可以排序,即使兩個回應之間的時間差小於其準確度的總和。預設值為「否」。(選用)

TSA 名稱

如果 TSA 的主體名稱必須包含在回應的 TSA 名稱欄位中,請將此選項設定為「是」。預設值為「否」。(選用)

ESS 憑證 ID 鏈

TSA 建立的 SignedData 物件總是包含已簽署屬性中簽署憑證的憑證識別碼(請參閱 RFC 2634,增強安全性服務)。如果將此變數設定為「否」,則僅此簽署憑證識別碼會包含在 SigningCertificate 已簽署屬性中。如果將此變數設定為「是」且指定了 certs 變數或 -chain 選項,則鏈的憑證識別碼也會包含在其中,其中 -chain 選項會覆寫 certs 變數。預設值為「否」。(選用)

ess_cert_id_alg

此選項指定雜湊函數,用於計算 TSA 的公開金鑰證書識別碼。預設為 sha256。(選用)

範例

以下所有範例都假設 OPENSSL_CONF 已設定為適當的設定檔,例如範例設定檔 openssl/apps/openssl.cnf 即可。

時間戳記要求

design1.txt 建立時間戳記要求,使用 SHA-256 摘要,不含隨機數和政策,且不需在回應中提供證書

openssl ts -query -data design1.txt -no_nonce \
      -out design1.tsq

建立類似的時間戳記要求,並明確指定訊息印記

openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \
       -no_nonce -out design1.tsq

以人類可讀格式列印前一個要求的內容

openssl ts -query -in design1.tsq -text

建立時間戳記要求,其中包含 design2.txt 的 SHA-512 摘要,要求簽署者證書和隨機數,並指定政策 ID(假設 tsa_policy1 名稱已在設定檔的 OID 區段中定義)

openssl ts -query -data design2.txt -sha512 \
      -tspolicy tsa_policy1 -cert -out design2.tsq

時間戳記回應

在產生回應之前,必須為 TSA 建立簽署證書,其中包含 timeStamping 關鍵延伸金鑰使用延伸功能,但不包含任何其他金鑰使用延伸功能。您可以將此行新增至設定檔的使用者證書區段,以產生適當的證書;

extendedKeyUsage = critical,timeStamping

請參閱 openssl-req(1)openssl-ca(1)openssl-x509(1) 以取得說明。以下範例假設 cacert.pem 包含 CA 的證書,tsacert.pem 是由 cacert.pem 簽發的簽署證書,而 tsakey.pem 是 TSA 的私鑰。

為要求建立時間戳記回應

openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \
      -signer tsacert.pem -out design1.tsr

如果您想使用設定檔中的設定,您只需撰寫

openssl ts -reply -queryfile design1.tsq -out design1.tsr

以人類可讀格式將時間戳記回覆列印至標準輸出

openssl ts -reply -in design1.tsr -text

建立時間戳記權杖,而非時間戳記回應

openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out

以人類可讀格式將時間戳記權杖列印至標準輸出

openssl ts -reply -in design1_token.der -token_in -text -token_out

從回應中萃取時間戳記權杖

openssl ts -reply -in design1.tsr -out design1_token.der -token_out

將「已授予」狀態資訊新增至時間戳記權杖,進而建立有效的回應

openssl ts -reply -in design1_token.der -token_in -out design1.tsr

時間戳記驗證

針對要求驗證時間戳記回覆

openssl ts -verify -queryfile design1.tsq -in design1.tsr \
      -CAfile cacert.pem -untrusted tsacert.pem

驗證包含證書鏈的時間戳記回覆

openssl ts -verify -queryfile design2.tsq -in design2.tsr \
      -CAfile cacert.pem

針對原始資料檔案驗證時間戳記權杖:openssl ts -verify -data design2.txt -in design2.tsr \ -CAfile cacert.pem

針對訊息印記驗證時間戳記權杖:openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \ -in design2.tsr -CAfile cacert.pem

您也可以查看「test」目錄以取得更多範例。

錯誤

  • SMTP 不支援時間戳記,不過使用 procmail(1)perl(1) 就能輕鬆實作基於電子郵件的自動 TSA。HTTP 伺服器支援以獨立的 Apache 模組形式提供。HTTP 伺服器支援由 tsget(1) 提供。不支援純粹的 TCP/IP 協定。

  • 包含 TSA 最後一個序號的檔案在讀取或寫入時並未鎖定。如果有多個 openssl(1) 執行個體同時嘗試建立時間戳記回應,就會產生問題。使用 Apache 伺服器模組時不會發生這個問題,它會執行適當的鎖定。

  • 在原始檔中尋找 FIXME 字詞。

  • 原始碼也應該由其他人審閱。

  • 需要更多測試,我只做了一些基本測試(請參閱 test/testtsa)。

歷史記錄

OpenSSL 1.1.1 導入了新的隨機產生器 (CSPRNG),並改進了種子產生機制。新的種子產生機制讓定義 RANDFILE 以儲存和還原隨機性變得不再必要。保留這個選項主要是為了相容性。

-engine 選項已在 OpenSSL 3.0 中棄用。

另請參閱

openssl(1)tsget(1)openssl-req(1)openssl-x509(1)openssl-ca(1)openssl-genrsa(1)config(5)ossl_store-file(7)

著作權所有 2006-2024 OpenSSL 專案作者。保留所有權利。

根據 Apache 授權條款 2.0(「授權條款」)授權。您只能在遵守授權條款的情況下使用此檔案。您可以在原始程式碼散佈中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得一份副本。