前言
最近,有V2EX的网友发现地处国内的服务器无法正常申请和续期Let's Encrypt的免费证书。最后查找原因,是因为Let's Encrypt的一个OSCP域名ocsp.int-x3.letsencrypt.org
被GFW污染,解析到了以31开头的FaceBook的IP或者其他被墙IP,而不是使用Akamai CDN的Let's Encrypt的OSCP服务器上。
1. nslookup ocsp.int-x3.letsencrypt.org 223.5.5.5
2. 服务器: public1.alidns.com
3. Address: 223.5.5.5
4. 非权威应答:
5. 名称: a771.dscq.akamai.net
6. Addresses: 2600:1417:76::6874:f3cb
7. 2600:1417:76::17d2:d741
8. 74.86.17.48
9. Aliases: ocsp.int-x3.letsencrypt.org
10. ocsp.int-x3.letsencrypt.org.edgesuite.net
11.
12. ping 74.86.17.48
13. 正在 Ping 74.86.17.48 具有 32 字节的数据:
14. 请求超时。
15. 请求超时。
16. 请求超时。
17. 请求超时。
18. 74.86.17.48 的 Ping 统计信息:
19. 数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
先让我们了解一下什么是OCSP。
在线证书状态协议(Online Certificate Status Protocol)是一个用于获取X.509数字证书撤销状态的网际协议。浏览器在访问一个https站点时,会先向CA的OCSP服务器发起请求,查询该证书是否有效,是否被吊销。当OCSP出现问题时,会有两个影响:
服务器端无法正常申请或续期SSL证书。
客户端浏览速度缓慢,尤其是Safari和IE浏览器,首次打开站点白屏的时间会大大增加。浏览器验证OCSP状态并超时需要比较长的时间,尽管OCSP请求超时还是认为证书有效,但还是会造成浏览体验大大降低。Chrome浏览器基本上不会受影响。
那我们怎么解决这个问题呢?我们可以使用OCSP装订。
OCSP装订(OCSP Stapling),正式名称为TLS证书状态查询扩展,可代替在线证书状态协议(OCSP)来查询X.509证书的状态。服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求。
网上关于Let's Encrypt启用OCSP装订的文章比较少,Hostloc也有MJJ在找教程。所以,下面我就会简单写一下国内服务器申请Let's Encrypt免费证书+Nginx服务器开始OCSP装订的步骤~
操作步骤
申请Let's Encrypt泛域名证书
下面是利用DNS API方式,使用acme.sh申请Let's Encrypt泛域名证书的步骤。DNS提供商为DNSPOD,其他主流的DNS提供商也大都能使用这种方法申请证书。
国内服务器需要先修改hosts以避免DNS污染,国外服务器则不需要。在hosts中添加一条
ocsp.int-x3.letsencrypt.org
的记录,将其指向下面中的一个,香港的Akamai CDN,国内访问速度不错:
175.45.42.217
175.45.42.209
安装acme.sh,官方文档在此
curl https://get.acme.sh | sh
在DNS控制台中申请一个API Key,记下备用。支持此方法的DNS见官方文档
输入API Id和Key 以DNSPOD为例
1.export DP_Id="15**04"
2.export DP_Key="ed512e50286f*********9326ec760d3d"
输入域名,申请证书
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
fullchain.cer
example.com.key
稍微一等,Let's Encrypt泛域名证书就申请好啦!而且acme.sh会在域名过期前几天续期证书。下面讲如何配置证书,以及Nginx开启OCSP装订。
Nginx开启OCSP装订
申请到的证书存放在~/.acme.sh/example.com
文件夹下,这个文件夹下面会肯定有这两个文件:
我们就要用到这两个文件,修改N滚下配置,并开启OCSP。
编辑Nginx配置文件,在server大括号中加入以下内容,并删除冲突的内容:
1.ssl_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #证书路径
2.ssl_certificate_key /[用户名]/.acme.sh/xmgspace.me/example.com.key; #私钥路径
3.ssl_stapling on; #开启OCSPssl_stapling_verify on; #开启OCSP验证
4.ssl_trusted_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #验证证书路径
编辑完成保存之后重启Nginx。
这样,OCSP装订就成功启用啦!要验证是否启用了OCSP,可以在SSL Lab,或者在MySSL中进行测试。另外还有一位来着国外的读者向我推荐了websiteplanet上的一个工具,但是证书信息略微有些简陋,日常维护证书用一下还可以。操作中遇到什么问题,欢迎在评论区留言哦!
转发自 Xiaomage's Blog
留言0