Hugo博客公告弹窗

OCSP装订:优化HTTPS性能

检测OCSP装订是否开启

一键查询脚本

curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/check-cert.sh && chmod +x check-cert.sh

运行脚本并提供域名作为参数:

./check-cert.sh example.com

输出,例如

OCSP Stapling: Enabled 
OCSP URI: http://e5.o.lencr.org 

Enabled 已启用,Not Enabled 未开启

或者可以使用以下命令检测, 将命令中 www.yourdomain.com 改为你的域名

openssl s_client -connect www.yourdomain.com:443 -servername www.yourdomain.com -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"
  • 成功输出OCSP Response Status: successful (0x0)
  • 失败提示OCSP response: no response sent

开启 OCSP 装订

开启OCSP装订需要在网站的nginx配置文件中添加如下配置,例如

# 123.com 的 HTTPS 配置
server {
    listen 443 ssl;
    http2 on;
    server_name 123.com;

    ssl_certificate /etc/nginx/certs/123.com_cert.pem;
    ssl_certificate_key /etc/nginx/certs/123.com_key.pem;
	
    # === OCSP 装订 配置开始 ===
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/123.com/chain.pem;

    resolver 8.8.8.8 1.0.0.1 valid=60s ipv6=off;
    resolver_timeout 2s;
    # === OCSP 装订 配置结束 ===
    
...
  • chain.pem 为完整证书链证书.
  • /etc/letsencrypt/live/123.com/chain.pem 修改为你证书实际绝对路径.

添加后,重启nginx服务器,

nginx -t && nginx -s reload

再次使用命令验证,OCSP装订是不是就已经开启了?

./check-cert.sh 123.com

优化

利用 Nginx 的 ssl_stapling_file 指令直接读取本地响应信息,这样就不会去实时查询证书的OCSP服务器,在进行SSL握手的时候直接将本地的响应信息进行下发,极大的加快了访问速度。

编写Shell脚本去获取OCSP响应, 我的这个脚本是针对 使用certbot申请证书编写的, 如果使用的是acme.sh,请根据相应目录修改

获取OCSP响应脚本

curl -sS -O https://raw.githubusercontent.com/woniu336/open_shell/main/getOCSP.sh && chmod +x getOCSP.sh

运行脚本,后边的参数为需要获取OCSP响应的域名

./getOCSP.sh 123.com

运行后就会在指定的目录生成OCSP响应文件了

Image

修改Nginx配置读取OCSP响应文件,也就是添加ssl_stapling_file参数,其他不变

    # === OCSP 装订 配置开始 ===
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/letsencrypt/live/123.com/chain.pem;
    ssl_stapling_file /etc/letsencrypt/ocsp/123.com/123.com.ocsp.resp;

    resolver 8.8.8.8 1.0.0.1 valid=60s ipv6=off;
    resolver_timeout 2s;
    # === OCSP 装订 配置结束 ===

重启Nginx后,OCSP响应的预加载就完成了

nginx -t && nginx -s reload

配置crontab定时任务,每日自动刷新OCSP缓存 虽然我们本地预加载了OCSP响应缓存,但是OCSP响应也是有生效时间了,超过有效时间就得重新获取,这里我们可以配置crontab定时任务去每日自动刷新OCSP响应缓存

(crontab -l ; echo "22 2 * * * /root/getOCSP.sh 123.com > /dev/null 2>&1") | crontab -

至此我们的Nginx OCSP装订工作就到此完成~

CC BY-NC-SA 4.0 转载请注明
最后更新于 2025-05-11 04:18
clarity统计