
太長了;博士
對於 certbot 取得的 buypass DV 證書,我需要明確告訴 NGINX 信任 buypass 根證書以啟用 OCSP 裝訂。 Let's Encrypt 憑證的情況並非如此,我不明白為什麼。我找到了一種方法(見下文),它看起來更像是一種解決方法,而不是一個可靠的解決方案。所以我想知道我在這裡做錯了什麼嗎?
細節
我注意到 buypass.com DV 證書(去SSL)透過 ACME 協定取得(透過證書機器人) NGINX 無法提供開箱即用的 OCSP,即使此類設定與 Let's Encrypt 憑證完美搭配:
ssl_stapling on;
ssl_stapling_verify on;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
我需要產生一個包含根憑證 ( Buypass_Class_2_Root_CA.pem
) 的新鏈:
cp /etc/letsencrypt/live/example.com/
cat /etc/ssl/certs/Buypass_Class_2_Root_CA.pem fullchain.pem > ocsp-chain.pem
並明確指示 NGINX 信任該鏈:
ssl_trusted_certificate /etc/letsencrypt/live/example.com/ocsp-chain.pem;
讓我更困惑的是,我不必為 Let's Encrypt 憑證執行此操作,並且 NGINX 設法提供裝訂的 OCSP沒有必須產生額外的ocsp-chain.pem
.
更多詳情(更新)
只是對生成的信任鏈進行一些澄清certbot
:
對於購買通行證:
/--------- fullchain.pem ---------\ /--- /etc/ssl/certs --\
example.com -> Buypass_Class_2_CA_5 -> Buypass_Class_2_Root_CA
\---- chain.pem ---/
對於讓我們加密:
/--------- fullchain.pem --------\ / /etc/ssl/certs \
example.com -> Lets_Encrypt_R3.pem -> DST_Root_CA_X3.pem
\---- chain.pem ---/
如果我執行以下命令:
cd /etc/letsencrypt/live/example.com
# $OSCP_URL is:
# * Let's Encrypt: http://r3.o.lencr.org
# * Buypass: http://ocsp.buypass.com
openssl ocsp -issuer chain.pem -cert fullchain.pem -url "${OCSP_URL}"
我明白了Response verify OK
。儘管如此,儘管nginx
用途openssl
在信任所有錨點的引擎蓋下/etc/ssl/certs
(在我的例子中/usr/lib/ssl/certs -> /etc/ssl/certs
),如果沒有上述解決方法,它無法驗證 OCSP:
2611#2611: OCSP_basic_verify() failed (SSL: error:27069065:OCSP routines:OCSP_basic_verify:certificate verify error:Verify error:unable to get issuer certificate) while requesting certificate status, responder: ocsp.buypass.com, peer: 23.55.161.57:80, certificate: "/etc/letsencrypt/live/example.com/fullchain.pem"
答案1
更新
事實證明,OpenSSL 無法正確處理由指定機構(而非頒發者)簽署的 OCSP 回應。雖然 RFC 6960明確表示應僅使用頒發者憑證(也證明指定機構)來驗證 OCSP 回應,OpenSSL 不遵守這一點,並要求您明確包含根憑證。如果您使用 CLI,這會自動發生(使用-CAfile
和的組合-noCApath
來驗證這一點!)。
原答案
我花了相當長的時間才想出解決辦法!問題不在於 NGINX,而在於 OpenSSL。我發現如果 OCSP 是由指定回應者簽署的(請參閱RFC 6960),其憑證包含在 OCSP 回應中,OpenSSL 在驗證回應時無法考慮此附加憑證。我無法確切地說為什麼使用 OpenSSL OCSP CLI(即 )時不會出現此問題openssl ocsp -issuer x -cert y -url z
。