今日在 Debug 线上接口的时候,发现 SSL 请求用了 3s 多,结合我们用的 Let’s Encrypt 证书,根据经验应该是查询 OCSP 信息时间过长导致的。

查看 OCSP 信息

openssl s_client -connect <域名>:443  -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

如果返回结果为

OCSP response: no response sent

那么显然是没有获取 OCSP 信息。

查看日志

切到线上环境看下配置文件,确认 Nginx 的 ssl_stapling on; 参数是存在的。检查 Nginx.conf 发现参数确实存在并开启。

查看日志

2020/06/06 05:28:18 [error] 32626#32626: OCSP responder 
timed out (110: Connection timed out) while requesting 
certificate status, responder: ocsp.int-x3.letsencrypt.org,

可以看到这样的一条报错,很明显 连接 OCSP 服务器超时了。

修改 HOSTS

在生产服务器无论如何 Ping 都无法 Ping 通,运行 nslookup 可以发现是 Cname 到的 a771.dscq.akamai.net 域名,在其他地域服务器上查询该域名发现跟国内返回的结果并不一致,应该是国内域名解析受到了干扰。

随后手动修改 /etc/hosts 添加以下一条。

23.2.16.115     ocsp.int-x3.letsencrypt.org

重启 Nginx 服务器。

nginx -s reload

测试 OCSP 服务

再次执行请求可以发现 已经可以获取 OCSP 的信息了。

OCSP response:
OCSP Response Data:
    OCSP Response Status: successful (0x0)
    Response Type: Basic OCSP Response

同时再次请求接口可以发现 SSL 速度已经发生了显著提升。