概述
OCSP stapling 是一个旨在提高 SSL 协商性能并保持访问者隐私的 TLS/SSL 扩展。
关于 OCSP
OCSP(在线证书状态协议)是一种用于检查 SSL 证书是否被吊销的协议。它被创建作为 CRL 的替代方案,以减少 SSL 协商时间。使用 CRL(证书吊销列表),浏览器会下载一份吊销证书序列号的列表并验证当前证书,这会增加 SSL 协商时间。在 OCSP 中,浏览器发送请求到 OCSP URL 并接收包含证书有效性状态的响应。
关于 OCSP stapling
OCSP 有两个主要问题:隐私和 CA 服务器的重负载。
由于 OCSP 需要浏览器联系 CA 来确认证书的有效性,这会损害隐私。CA 知道正在访问的网站以及谁在访问。
如果一个 HTTPS 网站有大量访问者,CA 的 OCSP 服务器必须处理所有访问者发出的 OCSP 请求。
当实现了 OCSP stapling 时,证书持有者(即 Web 服务器)自己查询 OCSP 服务器并缓存响应。这个响应通过 TLS/SSL 握手与 证书状态请求 扩展响应 “装订” 在一起。因此,CA 的服务器不再承担请求的负担,浏览器也不再需要向任何第三方披露用户的浏览习惯。
配置
修改域名 conf 文件,在 server {}
块证书文件引用位置的末尾加入以下代码:
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/your/chain.crt;
resolver 8.8.8.8 8.8.4.4 1.1.1.1 223.5.5.5 valid=30s ipv6=off;
resolver_timeout 10s;
参数解释
ssl_stapling on;
:
- 启用 OCSP Stapling,允许服务器在 SSL/TLS 握手过程中向客户端提供证书的有效性信息,从而提高安全性和性能。
ssl_stapling_verify on;
:
- 启用 OCSP Stapling 验证,确保 NGINX 验证 OCSP 响应的有效性,确保响应是来自受信任的 OCSP 服务器。
ssl_trusted_certificate /path/to/your/chain.crt;
:
- 指定信任的证书链文件(通常包含中间证书),用于验证 OCSP 响应的有效性。确保 NGINX 可以信任 OCSP 响应中的证书。
resolver 8.8.8.8 8.8.4.4 1.1.1.1 223.5.5.5 valid=30s ipv6=off;
:
- 指定 DNS 解析器的 IP 地址(如 Google 和 Cloudflare 的公共 DNS),用于解析 OCSP 服务器的域名。
valid=30s
表示缓存解析结果 30 秒,ipv6=off
则禁用 IPv6。
resolver_timeout 10s;
:
- 设置 DNS 解析超时时间为 10 秒。如果在此时间内未能解析域名,NGINX 将停止等待并处理相应的错误。
验证
使用 OpenSSL 命令:你可以使用 OpenSSL 的 s_client
命令来检查 OCSP Stapling:
openssl s_client -connect yourdomain.com:443 -status
查找输出中的 OCSP Response
部分,如果它包含 successful
,表示 OCSP Stapling 正常工作。
如下为未生效
OCSP response: no response sent
如下为已生效
OCSP response:
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
查看 OCSP 状态:在输出中,检查 OCSP Response
的状态是否为 good
,这表明证书是有效的。
输出示例:
OCSP Response Data:
OCSP Response Status: successful (0x0)
...
producedAt: Sep 22 12:00:00 2023 GMT
nextUpdate: Sep 29 12:00:00 2023 GMT
...
Cert Status: good
通过在线网站:打开网站(https://myssl.com)输入网址点击【立即检测】,等待检测完成后,在 “证书信息” 栏目查看 “OCSP 装订状态” 的参考值。
如下表示未生效
OCSP 装订状态 | 不支持
如下表示已生效
OCSP 装订状态 | 正常
0 条评论