我已经使用 SSL 和 letsencrypt 证书设置了 nginx。但是我无法让 OCSP 绑定正常工作。
从我在网上找到的信息来看,它应该使用以下配置,但不幸的是,它不行。我的 nginx vhost 如下所示:
server {
...
# SSL Certificates
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
# Allow Nginx to send OCSP results during the connection process
ssl_stapling on;
ssl_stapling_verify on;
resolver $DNS-IP-1 $DNS-IP-2 valid=300s;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 10s;
...
}
当我使用扫描我的域名时https://www.ssllabs.com报告称:
OCSP stapling No
我的配置中缺少什么?
答案1
我认为您的设置没有任何问题,但也许删除冗余resolver
指令会产生不同的结果。
我也遇到过类似的情况,我甚至测试过openssl
基于本文:
echo QUIT | openssl s_client -connect www.yourdomain.com:443 -servername www.yourdomain.com -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'
没有输出意味着 OCSP 装订尚未起作用。
据我观察,如果我重新启动/重新加载 Nginx,然后立即使用 SSL Labs 进行测试,它会失败。然后我会使用上述命令测试几次,直到成功,然后在 SSL Labs 上重新测试。我建议您试一试,如果第一次失败,请等待几分钟再试一次。对我来说,这种方法很有效。
答案2
nginx 正在获取 OCSP 响应后第一次使用相应证书提出请求。
这种行为可能会改变为了全力支持OCSP Must Staple
在此之前,一个可靠的装订测试是多次连接,让 nginx 有时间在其间获取签名的响应。
for i in 3 0; do openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>&1 | grep -A 13 OCSP; sleep $i; done
OCSP 响应器确实会失败 - 经常失败。如果它们很慢,nginx 会在超时(不可配置,据我所知 60 秒)后放弃并在错误日志中记录。如果你想立即知道,请尝试:
openssl x509 -noout -text -in example.crt | grep "OCSP - URI" | cut -d: -f2,3 | grep -io "^http://[-.a-z0-9]*$" | xargs curl -D-