解决Let's Encrypt证书OCSP域名无法访问解决办法


不少人会用免费的Let’s Encrypt SSL证书,但是由于国内访问Let’s Encrypt的OCSP节点会受到干扰的原因,用户在检查证书状态时受阻,从而导致访问被拖慢。

解决方案
  1. 切换至http,但是在https普及的情况下,这样做很不安全,不推荐
  2. 购买它家SSL证书,但是对于资金不多的学生来说也不推荐
  3. 启用OCSP stapling,令OCSP随证书一起发送给客户端,以此让客户端跳过自己去寻求验证的过程,提高 TLS 握手效率,推荐
开始实施

注意,操作均在目录/data/cert/ocsp中执行

1.在/etc/hosts中添加

1
23.32.3.72 ocsp.int-x3.letsencrypt.org

用来临时解决OCSP被干扰的问题

2.获取待验证网站证书链上的所有证书

证书链一般由根证书、一个或多个中间证书、站点证书组成。这些证书均可在浏览器中导出,或者去各大CA官方下载,这里我提供获取Let’s Encrypt证书链的操作方法

1
2
3
4
#根证书
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

3. 接下来我们将证书合成

1
2
cat intermediate.pem > chained.pem
cat root.pem >> chained.pem

4. 获取证书的OCSP地址

1
openssl x509 -in example.com.cer -noout -ocsp_uri

Let’s Encrypt证书的输出应该为http://ocsp.int-x3.letsencrypt.org

5. 合成证书

1
2
3
4
#复制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

6. 配置服务器 在nginx站点的配置文件里添上那么一段

1
2
3
4
#开启OCSP
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /data/cert/ocsp/chained.pem;

7. 重启服务器,使用

1
openssl s_client -connect example.com:443 -status -tlsextdebug </dev/null 2>&1 grep -i "OCSP response"

检查当前站点OCSP stapling是否生效 可能有缓存,可以多试几次,待出现

1
2
3
4
OCSP response: 
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response

字样即为开启成功