OpenSSL

密碼學和 SSL/TLS 工具包

openssl-ocsp

名稱

openssl-ocsp - 線上憑證狀態通訊協定指令

語法

OCSP 伺服器

openssl ocsp [-help] [-out file] [-issuer file] [-cert file] [-no_certs] [-serial n] [-signer file] [-signkey file] [-sign_other file] [-nonce] [-no_nonce] [-req_text] [-resp_text] [-text] [-reqout file] [-respout file] [-reqin file] [-respin file] [-url URL] [-host host:port] [-path pathname] [-proxy [http[s]://][userinfo@]host[:port][/path]] [-no_proxy addresses] [-header] [-timeout seconds] [-VAfile file] [-validity_period n] [-status_age n] [-noverify] [-verify_other file] [-trust_other] [-no_intern] [-no_signature_verify] [-no_cert_verify] [-no_chain] [-no_cert_checks] [-no_explicit] [-port num] [-ignore_err]

OCSP 伺服器

openssl ocsp [-index file] [-CA file] [-rsigner file] [-rkey file] [-passin arg] [-rother file] [-rsigopt nm:v] [-rmd digest] [-badsig] [-resp_no_certs] [-nmin n] [-ndays n] [-resp_key_id] [-nrequest n] [-multi process-count] [-rcid digest] [-digest] [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-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]

說明

線上憑證狀態通訊協定 (OCSP) 讓應用程式能夠確定已識別憑證的 (撤銷) 狀態 (RFC 2560)。

此指令執行許多常見的 OCSP 任務。它可用於列印要求和回應、建立要求並將查詢傳送至 OCSP 回應器,並本身表現得像一個迷你 OCSP 伺服器。

選項

此命令可以作為客戶端或伺服器執行。選項如下所述,分為這兩種模式。

OCSP 客戶端選項

-help

列印使用訊息。

-out 檔名

指定輸出檔名,預設為標準輸出。

-issuer 檔名

這指定目前的發行者憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

此選項可以使用多次。此選項必須在任何 -cert 選項之前。

-cert 檔名

將憑證檔名加入請求。輸入可以是 PEM、DER 或 PKCS#12 格式。

此選項可以使用多次。發行者憑證來自先前的 -issuer 選項,或是在未指定發行者憑證時發生錯誤。

-no_certs

不要在已簽署的請求中包含任何憑證。

-serial num

-cert 選項相同,除了將序號為 num 的憑證加入請求。序號會被解釋為十進位整數,除非前面有 0x。負整數也可以透過在值前面加上 - 符號來指定。

-signer 檔名, -signkey 檔名

使用 -signer 選項中指定的憑證和 -signkey 選項指定的私鑰來簽署 OCSP 請求。輸入可以是 PEM、DER 或 PKCS#12 格式。

如果沒有 -signkey 選項,則會從與憑證相同的檔案中讀取私鑰。如果兩個選項都沒有指定,則不會簽署 OCSP 請求。

-sign_other 檔名

要包含在已簽署請求中的其他憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

-nonce, -no_nonce

將 OCSP 隨機數擴充套件加入請求或停用 OCSP 隨機數加入。通常,如果使用 -reqin 選項輸入 OCSP 請求,則不會加入隨機數:使用 -nonce 選項將強制加入隨機數。如果正在建立 OCSP 請求(使用 -cert-serial 選項),則會自動加入隨機數,指定 -no_nonce 會覆寫此設定。

-req_text, -resp_text, -text

分別列印 OCSP 請求、回應或兩者的文字格式。

-reqout 檔案, -respout 檔案

將 DER 編碼的憑證要求或回應寫入 檔案

-reqin 檔案, -respin 檔案

檔案 讀取 OCSP 要求或回應檔案。如果其他選項暗示建立 OCSP 要求或回應(例如使用 -serial-cert-host 選項),則會忽略這些選項。

-url 回應者網址

透過網址指定回應者主機,並可選擇指定埠和路徑。可以指定 HTTP 和 HTTPS(SSL/TLS)網址。會忽略使用者資訊和片段組件(如果提供)。任何提供的查詢組件都會當作路徑組件的一部分處理。有關詳細資訊,請參閱以下說明的 -host-path 選項。

-host 主機:, -path 路徑名稱

如果存在 -host 選項,則會將 OCSP 要求傳送至埠 上的主機 主機主機 可以是網域名稱或 IP(v4 或 v6)位址,例如 127.0.0.1[::1](用於本機主機)。-path 選項指定要使用的 HTTP 路徑名稱,或預設為「/」。這等於指定具有 http:// 架構和給定的 主機 和選擇性 路徑名稱-url

-proxy [http[s]://][userinfo@]host[:port][/path]

用於連線至 OCSP 伺服器的 HTTP(S) 代理伺服器,除非套用 -no_proxy,請參閱下方。如果架構為 https,則代理伺服器埠預設為 80 或 443;除此之外,會忽略選擇性的 http://https:// 前置詞,以及任何使用者資訊和路徑組件。如果已設定,則預設為環境變數 http_proxy;否則,如果未使用 TLS,則為 HTTP_PROXY;否則,如果已設定,則為 https_proxy;否則,為 HTTPS_PROXY

-no_proxy 位址

不使用 HTTP(S) 代理伺服器的伺服器 IP 位址和/或 DNS 名稱清單,以逗號和/或空白分隔(後者的情況下,整個引數必須包含在「...」中)。如果已設定,則預設為環境變數 no_proxy;否則,為 NO_PROXY

-header 名稱=

名稱 標頭與指定的 新增至傳送至回應者的 OCSP 要求。可以重複此動作。

-timeout 秒數

與 OCSP 回應者的連線逾時時間(以秒為單位)。在 POSIX 系統上,以 OCSP 回應者身分執行時,此選項也會限制回應者願意等待客戶端要求的時間。此時間從回應者接受連線到收到完整要求為止進行衡量。

-verify_other 檔案

嘗試找出 OCSP 回應簽署憑證時,包含其他憑證的檔案或 URI。有些回應者會從回應中省略實際簽署者的憑證:此選項可用於在這種情況下提供必要的憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

-trust_other

-verify_other 選項所指定的憑證應明確受信任,且不會對其執行其他檢查。當完整的回應者憑證鏈不可用或信任根 CA 不適當時,這會很有用。

-VAfile file

包含明確受信任的回應者憑證的檔案或 URI。等同於 -verify_other-trust_other 選項。輸入可以是 PEM、DER 或 PKCS#12 格式。

-noverify

不要嘗試驗證 OCSP 回應簽章或隨機數值。此選項通常只會用於偵錯,因為它會停用對回應者憑證的所有驗證。

-no_intern

在搜尋簽署者憑證時,忽略 OCSP 回應中包含的憑證。使用此選項時,必須使用 -verify_other-VAfile 選項指定簽署者憑證。

-no_signature_verify

不檢查 OCSP 回應上的簽章。由於此選項容許 OCSP 回應上的無效簽章,因此通常只會用於測試目的。

-no_cert_verify

完全不驗證 OCSP 回應簽署者的憑證。由於此選項允許 OCSP 回應由任何憑證簽署,因此應僅用於測試目的。

-no_chain

不將回應中的憑證用作其他不受信任的 CA 憑證。

-no_explicit

如果將根 CA 設定為受信任以進行 OCSP 簽署,則不明確信任它。

-no_cert_checks

不對 OCSP 回應簽署者的憑證執行任何其他檢查。也就是說,不執行任何檢查以查看簽署者憑證是否被授權提供必要的狀態資訊:因此,此選項應僅用於測試目的。

-validity_period nsec, -status_age age

這些選項指定 OCSP 回應中將容許的時間範圍(以秒為單位)。每個憑證狀態回應都包含一個 notBefore 時間和一個可選的 notAfter 時間。目前時間應介於這兩個值之間,但這兩個時間之間的間隔可能只有幾秒鐘。實際上,OCSP 回應者和客戶端的時鐘可能無法精確同步,因此此類檢查可能會失敗。為避免這種情況,可以使用 -validity_period 選項指定可接受的誤差範圍(以秒為單位),預設值為 5 分鐘。

如果回應中省略了 notAfter 時間,則表示新的狀態資訊可立即取得。在這種情況下,會檢查 notBefore 欄位的年齡,以查看它是否不超過 age 秒。預設情況下,不會執行此額外檢查。

-rcid 摘要

此選項設定摘要演算法,用於 OCSP 回應中的憑證識別。任何受 openssl-dgst(1) 指令支援的摘要都可以使用。預設值與要求中使用的摘要演算法相同。

-摘要

此選項設定摘要演算法,用於 OCSP 要求中的憑證識別。任何受 OpenSSL dgst 指令支援的摘要都可以使用。預設值為 SHA-1。此選項可以用於多次指定後續憑證識別所使用的摘要。

-CAfile 檔案, -no-CAfile, -CApath 目錄, -no-CApath, -CAstore URI, -no-CAstore

請參閱 openssl-verification-options(1) 中的「受信任憑證選項」 以取得詳細資料。

-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) 中的「驗證選項」 以取得詳細資料。

-provider 名稱
-provider-path 路徑
-propquery propq

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

OCSP 伺服器選項

-index 索引檔

索引檔參數是 ca 格式文字索引檔的名稱,其中包含憑證吊銷資訊。

如果指定 -index 選項,則此指令會切換至回應者模式,否則會處於用戶端模式。回應者處理的要求可以在命令列上指定 (使用 -issuer-serial 選項),在檔案中提供 (使用 -reqin 選項),或透過外部 OCSP 用戶端提供 (如果指定 -port-url)。

如果存在 -index 選項,則 -CA-rsigner 選項也必須存在。

-CA 檔案

與使用 -index 給定的索引檔案中的撤銷資訊對應的 CA 憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

-rsigner 檔案

用來簽署 OCSP 回應的憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

-rkey 檔案

用來簽署 OCSP 回應的私人金鑰:如果不存在,則使用 -rsigner 選項中指定的檔案。

-passin arg

私人金鑰密碼來源。有關 arg 格式的詳細資訊,請參閱 openssl-passphrase-options(1)

-rother 檔案

要包含在 OCSP 回應中的其他憑證。輸入可以是 PEM、DER 或 PKCS#12 格式。

-rsigopt nm:v

在簽署 OCSP 回應時,將選項傳遞給簽章演算法。這些選項的名稱和值取決於演算法。

-rmd 摘要

簽署回應時要使用的摘要。

-badsig

在寫入回應簽章之前損毀它;這對於測試很有用。

-resp_no_certs

不要在 OCSP 回應中包含任何憑證。

-resp_key_id

使用金鑰 ID 識別簽署者憑證,預設使用主旨名稱。

-port portnum

監聽 OCSP 請求的埠。IPv4 和 IPv6 皆可。也可以使用 -url 選項指定埠。0 參數表示將自動選擇任何可用的埠。

-ignore_err

忽略格式錯誤的請求或回應:當作為 OCSP 客戶端時,如果收到格式錯誤的回應,則重試。當作為 OCSP 回應器時,在收到格式錯誤的請求時,繼續執行而不是終止。

-nrequest 數字

OCSP 伺服器在收到 數字 個請求後將退出,預設為無限。

-multi 處理程序數量

執行指定的 OCSP 回應器子處理程序數量,母處理程序會視需要重新產生子處理程序。子處理程序將偵測 CA 索引檔案的變更,並自動重新載入。建議在作為回應器執行時使用 -timeout 選項,以限制每個子處理程序願意等待客戶端 OCSP 回應的時間。此選項可在 POSIX 系統(支援 fork() 和其他必要的 unix 系統呼叫)上使用。

-nmin 分鐘數, -ndays 天數

最新撤銷資訊可用的分鐘數或天數:用於 nextUpdate 欄位。如果兩個選項都不存在,則省略 nextUpdate 欄位,表示最新撤銷資訊立即可用。

OCSP 回應驗證

OCSP 回應遵循 RFC2560 中指定的規則。

最初會找到 OCSP 回應者憑證,並使用回應者憑證的公開金鑰檢查 OCSP 要求上的簽章。

接著會對 OCSP 回應者憑證執行一般憑證驗證,在此過程中建立憑證鏈。用於建立鏈的受信任憑證的位置可以透過 -CAfile-CApath-CAstore 選項指定,否則會在標準 OpenSSL 憑證目錄中尋找這些位置。

如果初始驗證失敗,OCSP 驗證程序就會停止並顯示錯誤。

否則,就會將要求中的發行 CA 憑證與 OCSP 回應者憑證進行比較:如果相符,OCSP 驗證就會成功。

否則,就會將 OCSP 回應者憑證的 CA 與要求中的發行 CA 憑證進行檢查。如果相符,且 OCSP 回應者憑證中存在 OCSPSigning 延伸金鑰使用,則 OCSP 驗證就會成功。

否則,如果 -no_explicit 沒有設定,就會檢查 OCSP 回應者 CA 的根 CA,以查看它是否受信任可進行 OCSP 簽署。如果是,則 OCSP 驗證就會成功。

如果這些檢查都沒有成功,則 OCSP 驗證就會失敗。

如果 OCSP 回應者憑證是由它正在發布撤銷資訊的 CA 直接授權(且正確設定),則驗證就會成功,這表示實際上是什麼意思。

如果 OCSP 回應者是「全球回應者」,可以提供多個 CA 的詳細資料,且有自己的獨立憑證鏈,則它的根 CA 可以受信任可進行 OCSP 簽署。例如

openssl x509 -in ocspCA.pem -addtrust OCSPSigning -out trustedCA.pem

或者,可以使用 -VAfile 選項對回應者憑證本身明確信任。

注意事項

如前所述,大部分驗證選項都是用於測試或除錯。通常只需要使用 -CApath-CAfile-CAstore 和(如果回應者是「全球 VA」)-VAfile 選項。

OCSP 伺服器僅適用於測試和示範目的:它並不真正可用作完整的 OCSP 回應器。它僅包含非常簡單的 HTTP 請求處理,並且只能處理 OCSP 查詢的 POST 表單。它還串行處理請求,這表示它在處理完當前請求之前無法回應新的請求。撤銷的文字索引檔案格式對於大量撤銷資料而言也是低效率的。

可以使用 -reqin-respout 選項透過 CGI 腳本在回應器模式下執行此命令。

範例

建立 OCSP 請求並將其寫入檔案

openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem -reqout req.der

將查詢傳送至 URL 為 http://ocsp.myhost.com/ 的 OCSP 回應器,將回應儲存至檔案,以文字形式列印出來,並驗證回應

openssl ocsp -issuer issuer.pem -cert c1.pem -cert c2.pem \
    -url http://ocsp.myhost.com/ -resp_text -respout resp.der

讀取 OCSP 回應並列印出文字形式

openssl ocsp -respin resp.der -text -noverify

使用標準 ca 組態和獨立回應器憑證在埠 8888 上的 OCSP 伺服器。所有請求和回應都會列印至檔案。

openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
       -text -out log.txt

與上述相同,但在處理一個請求後結束

openssl ocsp -index demoCA/index.txt -port 8888 -rsigner rcert.pem -CA demoCA/cacert.pem
    -nrequest 1

使用內部產生的請求查詢狀態資訊

openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
    -issuer demoCA/cacert.pem -serial 1

使用從檔案讀取的請求查詢狀態資訊,並將回應寫入第二個檔案。

openssl ocsp -index demoCA/index.txt -rsigner rcert.pem -CA demoCA/cacert.pem
    -reqin req.der -respout resp.der

歷史記錄

在 OpenSSL 1.1.0 中新增了 -no_alt_chains 選項。

版權所有 2001-2023 OpenSSL 專案作者。保留所有權利。

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