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 部署的一部分,其角色是提供特定資料在特定時間之前存在的長期證明。以下是通訊協定的簡要說明
TSA 用戶端會為資料檔案計算單向雜湊值,並將雜湊值傳送給 TSA。
TSA 會將目前日期和時間附加到收到的雜湊值,對其進行簽章,並將時間戳記代幣傳送回用戶端。透過建立此代幣,TSA 證明原始資料檔案在回應產生時存在。
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
時間戳記回應驗證
-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 取得一份副本。