记录一些常用的函数和瞎折腾的过程……

在nginx中启用OCSP Stapling

提醒:本文最后更新于 230 天前,文中所描述的信息可能已发生改变,请谨慎使用。

OCSP(在线证书状态协议)是用于检查SSL证书是否已被吊销的协议。在配置使用它,可以减少SSL的协商时间。上打开看一个网页,要经过DNS查询、TCP链接建立、HTTP请求、验证证书等操作后,才会传输数据,特别是在网络情况不好的情况好,可能验证SSL时就需要好几秒的时间,配置好OCSP格外重要。OCSP Stapling其实是服务器先去CA指定的OCSP URL获取OCSP查询结果,并将结果直接发送给客户端,免去客户端再去CA服务器验证的动作,从而提升访问时的连接速度和用户体验

要启用OCSP,其实很简单,比如我使用的是nginx,在网站的server配置文件中,加入以入以下内容:

server{
  ……
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /ssl/fullchain.cer;
  ……
}

ssl_trusted_certificate是要验证的CA证书,我使用的是acme.sh申请的证书,直接使用fullchain.cer进行验证。

然后重新加载nginx的配置文件,OCSP就生效了。

下面来验证一下,运行如下命令,记得将命令中的域名改为你的自己要验证的域名:

root@ubuntu:~$ openssl s_client -connect psay.cn:443 -servername psay.cn -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"

如果返回如下信息表示已经生效:

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

如果返回如下信息则表示没有生效:

OCSP response: no response sent

或者使用下面的命令也可以验证:

root@ubuntu:~$ echo QUIT | openssl s_client -connect psay.cn:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

如果返回如下信息表示已经生效:

OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = US, O = Let's Encrypt, CN = R3
Produced At: Mar 3 19:36:00 2021 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 48DAC9A0FB2BD32D4FF0DE68D2F567B735F9B3C4
Issuer Key Hash: 142EB317B75856CBAE500940E61FAF9D8B14C2C6
Serial Number: 04378C3A51D81B506B9C0182A03971EB5120
Cert Status: good
This Update: Mar 3 19:00:00 2021 GMT
Next Update: Mar 10 19:00:00 2021 GMT

如果没有返回信息则表示没有生效。