Nginx开启OCSP以解决Let's Encrypt证书被DNS污染访问缓慢

摘要


最近突然发现我的网站在苹果手机上Safari浏览器上第一次会访问会非常慢,但只要第一次访问后,后续的访问速度均不受影响...这就纳闷了,网站速度我都是优化过的,为什么会存在这种情况呢?困扰我许久,因为只有手机访问才这样,在电脑上访问速度都很快,完全没有头绪。


正文

一、问题研究

在多次尝试后,发现在Firefox和IE浏览器上能复现该问题,在ssl握手之前,Firefox会阻塞2s,IE浏览器会阻塞10s以上;

问题能复现就好解决了;

使用Charles进行抓包,发现使用IE打开网站的时候,会去请求ocsp.int-x3.letsencrypt.org域名进行证书验证,该域名无法访问从而导致访问速度变慢;

所以问题就出在SSL证书上面,我使用的证书全部是Let's Encrypt证书,其特点是免费、支持泛域名、并且脚本一键部署,但是Let's Encrypt证书的OCSP验证域名被DNS污染,无法解析到正确的IP地址,导致无法进行证书有效性验证。

Nginx OCSP stapling

由网站服务器去进行OCSP查询,缓存查询结果,然后在与浏览器进行TLS连接时返回给浏览器,这样浏览器就不需要再去查询了。别急,开启之前我们是不是得先知道如何查询是否开启了OCSP装订,自:新消息频道 不然捣鼓半天都不知道开启成功了没有可还行..

检测OCSP

有两种方法: 1.在线检测: 亚洲诚信的SSL检测工具 https://myssl.com/


手动检测:

openssl s_client -connect ffis.me:443 -servername ffis.me -status -tlsextdebug < /dev/null 2>&1 | grep -i OCSP response

开启 OCSP stapling

开启OCSP装订需要在网站的nginx配置文件中添加如下配置:

# 开启 OCSP Stapling,开启后服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求
ssl_stapling on;
# 启用或禁用服务器对OCSP响应的验证
ssl_stapling_verify on;
# 证书的签发机构的ca证书,我的Let's Encrypt是acme.sh自动获取的证书,ca证书目录为:/root/.acme.sh/ffis.me/ca.cer
ssl_trusted_certificate /usr/local/nginx/conf/ssl/ffis.me_ca.cer;
# 添加resolver解析OSCP响应服务器的主机名,valid表示缓存。这里添加是为了解决DNS污染问题。
resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=60s;
# 网络超时时间
resolver_timeout 2s;

添加后,重启nginx服务器,再次使用命令验证,OCSP装订是不是就已经开启了。

使用myssl验证,也提示OCSP已装订

Firefox、IE、Safari浏览器的访问也正常了

再次使用Charles进行抓包,发现浏览器会跳过OCSP验证

。之后我会在写一下关于开启OCSP的弊端和优化方案。


完结

以上就是Nginx开启OCSP以解决Let's Encrypt证书被DNS污染访问缓慢的内容,欢迎小伙伴们交流讨论。

相关文章

文章浏览阅读3.7k次,点赞2次,收藏5次。Nginx学习笔记一、N...
文章浏览阅读1.7w次,点赞14次,收藏61次。我们在使用容器的...
文章浏览阅读1.4k次。当用户在访问网站的过程中遇到404错误时...
文章浏览阅读2.7k次。docker 和 docker-compose 部署 nginx+...
文章浏览阅读1.3k次。5:再次启动nginx,可以正常启动,可以...
文章浏览阅读3.1w次,点赞105次,收藏182次。高性能:Nginx ...