tl;博士
对于 certbot 获取的 buypass DV 证书,我需要明确告诉 NGINX 信任 buypass 根证书以启用 OCSP 装订。Let's Encrypt 证书不是这种情况,我不知道为什么。我找到了一种方法(见下文),它看起来更像是一种解决方法,而不是一种可靠的解决方案。所以我想知道我是否在这里做错了什么?
细节
我注意到,对于通过 ACME 协议(通过certbot )获取的 buypass.com DV 证书( GO SSL ), 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"