Nginx配置OCSP stapling
HTTPS握手慢,很多时候卡在浏览器去 CA 查询证书吊销状态这一步。
在 Nginx 上开启 OCSP stapling 后,服务器会提前把吊销状态缓存好,握手时直接发给浏览器,省去一次外部请求。
这篇教程面向零基础运维,带你把 Nginx 的 OCSP stapling 配起来并验证成功。
配之前先确认这几点
OCSP stapling 依赖完整的证书链和 DNS 解析,缺一个都可能失败。
- Nginx 版本:建议使用 1.3.7 及以上版本,1.13.7 以上支持
ssl_stapling_verify更完整。用nginx -V查看是否带--with-http_ssl_module。 - 证书链完整:
ssl_certificate指向的文件必须包含站点证书和中间 CA 证书,顺序是站点证书在前、中间证书在后。 - 域名可解析:Nginx 要通过域名去访问 CA 的 OCSP 响应器,所以
server_name里的域名必须能解析到本机,内网环境建议在/etc/hosts里做对应。 - 时间同步:系统时间偏差过大会导致 OCSP 响应校验失败,用
date确认时间准确。
在 server 块中加入 OCSP 配置
打开对应站点的配置文件,一般路径是 /etc/nginx/conf.d/你的域名.conf 或宝塔面板的 网站 → 设置 → 配置文件。
在 server 块内加入以下内容:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/你的域名-ca.pem;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;
几个参数解释一下:
ssl_stapling on:开启 OCSP stapling。ssl_stapling_verify on:校验 OCSP 响应的合法性。ssl_trusted_certificate:指定信任链文件。如果ssl_certificate已经包含完整链,这里可以填同一个文件;否则单独放一份 CA 链文件。resolver:指定 DNS 服务器,用于解析 OCSP 响应器地址,不能省略。
保存后执行 nginx -t 检查语法,通过再 nginx -s reload 重载。
几个容易踩的坑
配置看起来简单,但下面这几种情况会让 stapling 静默失效。
- resolver 写成内网 DNS 却无法访问外网:OCSP 响应器在公网,DNS 必须能解析公网域名。
- ssl_certificate 只放了站点证书:缺少中间证书时,stapling 无法正常工作,浏览器可能仍显示未装订。
- 证书链顺序写反:站点证书和中间证书顺序颠倒会导致验证失败。
- 用了自签名证书:自签名证书没有公共 CA 的 OCSP 响应器,开启后也不会生效。
验证 OCSP stapling 是否生效
重载后用下面命令测试:
echo | openssl s_client -connect 你的域名:443 -servername 你的域名 -status 2>/dev/null | grep -A 1 "OCSP Response Status"
如果输出里出现 OCSP Response Status: successful,说明装订成功。
如果显示 no response sent,多半是 resolver 不通或证书链不完整,按上一节逐项排查。
另外,首次请求可能因为缓存未建立而暂时没有装订,多访问几次再看结果更准确。
常见疑问
开启 OCSP stapling 后,是否还需要在浏览器端关闭 OCSP 检查? 不需要。
stapling 是服务器主动提供状态,浏览器端不用改任何设置。
OCSP 响应缓存多久更新一次? 由 CA 返回的 nextUpdate 决定,Nginx 会自动处理,不需要手动干预。
多个域名共用一个 server 块时怎么配? 每个域名需要独立的 ssl_certificate 和 ssl_trusted_certificate,
建议拆成独立 server 块,
避免证书链混淆。
配置完成后,可以用在线 SSL 检测工具查看是否显示 OCSP stapling 已启用,作为辅助确认。
整个过程不复杂,关键是证书链完整和 resolver 可用这两点。