
什么是 OCSP Stapling?
OCSP Stapling(在线证书状态协议装订)是一种技术,允许您的网页服务器从证书颁发机构 (CA) 预先获取 SSL 证书撤销状态,并将其直接附加到 TLS 握手中。这消除了浏览器需要向 CA 发送单独网络请求的需求,显著减少了握手延迟。
如果没有 OCSP Stapling,每次用户连接到您的 HTTPS 站点时,他们的浏览器都会联系 CA 的 OCSP 响应程序来验证证书是否被撤销。这会增加额外的 DNS 查找和往返 — 通常 50–300 毫秒(取决于 CA 的服务器位置)— 然后连接才能完全建立。
启用 OCSP Stapling 后,您的服务器会定期查询 CA,缓存签名的 OCSP 响应,并将其"装订"到每个 TLS 握手。浏览器会立即收到有效性证明,而无需联系 CA。
为什么 OCSP Stapling 很重要
没有 OCSP Stapling 的标准 TLS 握手过程如下:
- 浏览器发送 ClientHello
- 服务器响应 ServerHello + 证书
- 浏览器向 CA 发送 OCSP 请求(增加 50–300 毫秒延迟)
- CA 返回证书状态
- 浏览器验证并生成会话密钥
- 建立 HTTPS 连接
第 3–4 步正是 OCSP Stapling 消除的内容。对于面向全球受众的网站(其中 CA 服务器可能位置偏远),此开销可能会对首字节时间(TTFB)和核心网页生命值(Core Web Vitals)得分产生显著影响。
三个主要好处:(1)将 TLS 握手延迟减少 50–300 毫秒(2)保护用户隐私 — CA 不会了解哪些用户访问您的网站(3)减少 CA OCSP 响应程序的负载,提高整体服务稳定性
在 Nginx 上启用 OCSP Stapling
Nginx 自 1.3.7 版本起支持 OCSP Stapling。将以下指令添加到您的服务器块:
第 1 步 — 添加 OCSP Stapling 指令
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/certs/chain.pem;
# DNS resolver for OCSP lookup
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;
}
第 2 步 — 准备证书链文件
在 ssl_trusted_certificate 中指定的文件应仅包含中间证书 + 根证书(不包含您的域证书)。大多数 SSL 提供商都包含一个名为 ca-bundle.crt 或 chain.pem 的文件,可直接在此处使用。
第 3 步 — 测试并重载 Nginx
nginx -t && systemctl reload nginx
第 4 步 — 验证 OCSP Stapling 是否活跃
openssl s_client -connect example.com:443 -status 2>/dev/null | grep -A 5 "OCSP Response"
成功的输出会显示 OCSP Response Status: successful 和 Cert Status: good。
在 Apache 上启用 OCSP Stapling
Apache 从 2.3.3 版本开始通过 mod_ssl 支持 OCSP Stapling。将这些指令添加到您的 VirtualHost 配置:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/chain.pem
# OCSP Stapling
SSLUseStapling on
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
</VirtualHost>
# Add this outside VirtualHost (global scope)
SSLStaplingCache shmcb:/run/apache2/ssl_stapling(128000)
启用 mod_ssl 并重载
a2enmod ssl
apachectl configtest && systemctl reload apache2
使用在线工具验证
除了命令行,使用这些免费工具来确认 OCSP Stapling 是否正常工作:
- SSL Labs (ssllabs.com/ssltest) — 完整的 SSL 报告,包括 OCSP Stapling 状态
- DigiCert SSL 诊断 — 证书链和 OCSP 验证检查
- testssl.sh — 命令行 TLS 配置审计工具
常见问题和解决方案
Nginx:OCSP 响应不立即显示
Nginx 在重载后的第一次真实连接时获取 OCSP 响应,而不是立即获取。发送测试请求并再次检查。还要验证 resolver 指令是否已配置 — 如果没有配置,Nginx 无法为 OCSP 响应程序执行 DNS 查找。
Apache:未定义 SSLStaplingCache
SSLStaplingCache 指令必须放在任何 VirtualHost 块的外部。将其添加到您的主 httpd.conf 或在 conf-enabled 目录中创建一个专用的 ssl-stapling.conf。
OCSP Stapling 与 Let's Encrypt 兼容吗?
可以,Let's Encrypt 完全支持 OCSP Stapling。但是,Let's Encrypt 的 OCSP 响应程序有时比商业 CA 响应程序更慢。对于需要最大 TLS 性能的网站,来自 RapidSSL 或 GeoTrust 等提供商的付费 SSL 证书提供更可预测的 OCSP 响应时间。
OCSP Stapling 和 TLS 1.3
TLS 1.3(RFC 8446)将标准握手从 2 次往返减少到 1-RTT,大大减少了连接设置时间。OCSP Stapling 在 TLS 1.3 中仍然完全受支持,通过在 TLS 1.2 中使用的相同证书状态请求扩展。要点如下:
- 对于新连接(1-RTT),OCSP Stapling 提供与 TLS 1.2 相同的延迟节省
- TLS 1.3 还支持使用预共享密钥(PSK)的 0-RTT 会话恢复 — 在这种模式下,不交换证书,因此 OCSP Stapling 与返回访客无关
- Nginx 1.13.0+ 和 Apache 2.4.8+ 同时支持 TLS 1.3 和 OCSP Stapling
- 同时启用两者是获得最大性能的推荐配置
| TLS 版本 | 往返次数 | OCSP Stapling | 说明 |
|---|---|---|---|
| TLS 1.2 | 2-RTT | 支持 | 旧版标准 |
| TLS 1.3 | 1-RTT | 支持 | 推荐 |
| TLS 1.3 (0-RTT) | 0-RTT | N/A | PSK 恢复 — 不交换证书 |
LiteSpeed 和 Caddy 上的 OCSP Stapling
Nginx 和 Apache 不是唯一支持 OCSP Stapling 的网络服务器。两个流行的替代方案处理方式不同:
LiteSpeed Web 服务器
LiteSpeed 从版本 5.4 起自动默认启用 OCSP Stapling。不需要额外的配置。您可以在 LiteSpeed 管理控制台中的"虚拟主机"→"SSL"→"OCSP Stapling"下验证或调整设置。
Caddy
Caddy 为每个 HTTPS 网站自动启用 OCSP Stapling,包括它通过 Let's Encrypt 管理的证书。对于外部提供的证书,只需声明证书文件,Caddy 将处理装订,无需任何额外指令:
# Caddyfile — OCSP Stapling is automatic
example.com {
tls /etc/ssl/certs/example.com.crt /etc/ssl/private/example.com.key
root * /var/www/html
file_server
}
不同服务器上 OCSP Stapling 配置工作量的比较:
- Nginx:需要手动配置 — 但提供细粒度的缓存 TTL 控制
- Apache:需要全局
SSLStaplingCache指令的手动配置 - LiteSpeed:从 v5.4 开始自动,无需配置
- Caddy:对所有证书完全自动,无需配置
OCSP Stapling 高级调试
如果 openssl s_client 检查未返回 OCSP 响应,请执行以下诊断步骤:
查找嵌入在证书中的 OCSP URI
openssl x509 -in /etc/ssl/certs/example.com.crt -noout -text | grep -A 3 "OCSP"
这会显示您的服务器需要访问的 OCSP 响应程序 URL(例如 http://ocsp.digicert.com)。
直接测试 OCSP 响应程序
openssl ocsp \
-issuer /etc/ssl/certs/chain.pem \
-cert /etc/ssl/certs/example.com.crt \
-url http://ocsp.digicert.com \
-text
如果输出显示 Response verify OK 和 good,则 CA 响应正确,问题出在您的服务器配置上,而不是证书上。
检查 Nginx 错误日志
tail -n 50 /var/log/nginx/error.log | grep -i ocsp
缺少或配置错误的 resolver 指令是最常见的原因。没有它,Nginx 无法执行 DNS 查找以访问 OCSP 响应程序。
检查 Apache 错误日志
grep -i "stapl" /var/log/apache2/error.log | tail -20
当 SSLStaplingCache 缺少全局范围时,Apache 会记录类似 ssl stapling_init_OCSP_cache: cache not configured 的警告。
什么是 OCSP Must-Staple?
OCSP Must-Staple 是一个可选的证书扩展,指示浏览器要求每次连接时都有一个有效的 OCSP staple。如果服务器未能提供,浏览器将拒绝连接。这提供了最强的可能的撤销执行,但要求 OCSP Stapling 始终可靠地运行。
常见问题
OCSP Stapling 与标准 OCSP 有何不同?
标准 OCSP 要求浏览器在每次连接时直接与 CA 联系,增加延迟并向 CA 泄露用户的 IP。OCSP Stapling 让服务器预先获取并缓存 CA 的响应,将其作为握手的一部分传递给浏览器 — 更快且更私密。
我应该在每个 HTTPS 网站上启用 OCSP Stapling 吗?
应该。启用 OCSP Stapling 没有任何缺点,几乎每个 HTTPS 网站都受益于减少的握手开销和改进的用户隐私。
OCSP Stapling 与 HTTP/2 一起工作吗?
OCSP Stapling 与 HTTP/2 无缝配合。由于 HTTP/2 需要 HTTPS,同时启用两者可以最大化连接设置效率和页面加载性能。
需要具有完全 OCSP Stapling 支持的 SSL 证书?
AsiaGB 提供来自 RapidSSL、GeoTrust 和 DigiCert 的 SSL 证书 — DV SSL 从 1,000 泰铢/年起,通配符 SSL 从 5,000 泰铢/年起,都支持 OCSP Stapling 和 HTTP/2。
查看所有 SSL 证书