如果没记错的话,4月初开始发现Let's Encryptocsp域名被墙(GFW牛逼~),导致站点加载速度贼慢贼慢,详情可见:https://www.songhaifeng.com/zwxh/189.html

但目前只是通过切换证书来解决而已,实际上还可以通过配置OCSP Stapling来解决。

在线证书状态协议(Online Certificate Status Protocol),简称 OCSP,是一个用于获取 X.509 数字证书撤销状态的网际协议,在 RFC 6960 中定义。OCSP 用于检验证书合法性,查询服务一般由证书所属 CA 提供。OCSP 查询的本质,是一次完整的 HTTP 请求加响应的过程,这中间涵括的 DNS 查询、建立 TCP 连接、Web 端工作等步骤,都将耗费更多时间,使得建立 TLS 花费更多时长。

而这时,OCSP Stapling 出现了。经由 OCSP Stapling(OCSP 封套),Web 端将主动获取 OCSP 查询结果,并随证书一起发送给客户端,以此让客户端跳过自己去寻求验证的过程,提高 TLS 握手效率。

生成OCSP Stapling文件

需要准备两份证书:

根证书(root.pem) + 中间证书(intermediate.pem)

以下以Let's Encrypt证书为例:

根证书:

DST Root CA X3

https://ssl-tools.net/certificates/dac9024f54d8f6df94935fb1732638ca6ad77c13.pem

ISRG Root X1

https://letsencrypt.org/certs/isrgrootx1.pem

中间证书:

Let's Encrypt Authority X1

https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem

Let's Encrypt Authority X2

https://letsencrypt.org/certs/lets-encrypt-x2-cross-signed.pem

Let's Encrypt Authority X3

https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem

Let's Encrypt Authority X4

https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.pem

这里以DST Root CA X3 根证书 + Let's Encrypt Authority X3 中间证书 为例(现在 Let's Encrypt 签发的证书基本都是这样的组合)

// 下载根证书和中间证书
wget -O root.pem https://ssl-tools.net/certificates/dac9024f54d8f6df94935fb1732638ca6ad77c13.pem
wget -O intermediate.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
// 生成 OCSP Stapling 验证文件注意,中间证书在上、根证书在下
cat intermediate.pem > chained.pem
cat root.pem >> chained.pem

这样,生成的 chained.pem 就是所需的 OCSP Stapling 验证文件。

开启OCSP Stapling

仅以nginx为例,在配置文件的server块中添加如下配置:

ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/certs/chained.pem;
保存后重启nginx即可

验证 OCSP Stapling 是否开启

使用 SSLLABS 自动验证

访问 https://www.ssllabs.com/ssltest/ ,输入域名,稍等片刻后,如果发现结果中出现如下内容则证明已成功开启 OCSP Stapling :

Nginx启用OCSP Stapling配置 热爱折腾 第1张

手动验证

echo QUIT | openssl s_client -connect 域名:443 -status 2> /dev/null | grep -A 17 'OCSP response:'

结果为下图内容,则开启成功:

Nginx启用OCSP Stapling配置 热爱折腾 第2张

注意事项

看图片最后一行可以知道,该验证一个月需要更新一次,继续以上操作即可,或者编写shell脚本进行定时更新即可。