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
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 取得副本。