不少人会用免费的Let’s Encrypt SSL证书,但是由于国内访问Let’s Encrypt的OCSP节点会受到干扰的原因,用户在检查证书状态时受阻,从而导致访问被拖慢。
解决方案
- 切换至http,但是在https普及的情况下,这样做很不安全,不推荐
- 购买它家SSL证书,但是对于资金不多的学生来说也不推荐
- 启用OCSP stapling,令OCSP随证书一起发送给客户端,以此让客户端跳过自己去寻求验证的过程,提高 TLS 握手效率,推荐
开始实施
-
注意,操作均在目录
- 在/etc/hosts中添加
23.32.3.72 ocsp.int-x3.letsencrypt.org
用来临时解决OCSP被干扰的问题
- 获取待验证网站证书链上的所有证书,证书链一般由根证书、一个或多个中间证书、站点证书组成。这些证书均可在浏览器中导出,或者去各大CA官方下载,这里我提供获取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
- 接下来我们将证书合成
cat intermediate.pem > chained.pem cat root.pem >> chained.pem
- 获取证书的OCSP地址
openssl x509 -in example.com.cer -noout -ocsp_uri
Let’s Encrypt证书的输出应该为
http://ocsp.int-x3.letsencrypt.org
- 合成证书
#复制fullchain.cer cp /data/cert/example.com/fullchain.cer ./ #合成证书 openssl ocsp -no_nonce -issuer intermediate.pem -CAfile chained.pem -VAfile chained.pem -cert fullchain.cer -url http://ocsp.int-x3.letsencrypt.org -text
- 配置服务器
在nginx站点的配置文件里添上那么一段#开启OCSP ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /data/cert/ocsp/chained.pem;
- 重启服务器,使用
openssl s_client -connect example.com:443 -status -tlsextdebug < /dev/null 2>&1 | grep -i "OCSP response"
检查当前站点OCSP stapling是否生效
可能有缓存,可以多试几次,待出现OCSP response: OCSP Response Data: OCSP Response Status: successful (0x0) Response Type: Basic OCSP Response
字样即为开启成功
/data/cert/ocsp
中执行