前言
最近,有V2EX的网友发现地处国内的服务器无法正常申请和续期Let's Encrypt的免费证书。最后查找原因,是因为Let's Encrypt的一个OSCP域名ocsp.int-x3.letsencrypt.org
被GFW污染,解析到了以31开头的FaceBook的IP或者其他被墙IP,而不是使用Akamai CDN的Let's Encrypt的OSCP服务器上。
nslookup ocsp.int-x3.letsencrypt.org 223.5.5.5
服务器: public1.alidns.com
Address: 223.5.5.5
非权威应答:
名称: a771.dscq.akamai.net
Addresses: 2600:1417:76::6874:f3cb
2600:1417:76::17d2:d741
74.86.17.48
Aliases: ocsp.int-x3.letsencrypt.org
ocsp.int-x3.letsencrypt.org.edgesuite.net
ping 74.86.17.48
正在 Ping 74.86.17.48 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
74.86.17.48 的 Ping 统计信息:
数据包: 已发送 = 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为例
export DP_Id="15**04" export DP_Key="ed512e50286f*********9326ec760d3d"
- 输入域名,申请证书
acme.sh --issue --dns dns_dp -d example.com -d *.example.com
稍微一等,Let's Encrypt泛域名证书就申请好啦!而且acme.sh会在域名过期前几天续期证书。下面讲如何配置证书,以及Nginx开启OCSP装订。
Nginx开启OCSP装订
申请到的证书存放在~/.acme.sh/example.com
文件夹下,这个文件夹下面会肯定有这两个文件:
- fullchain.cer
- example.com.key
我们就要用到这两个文件,修改N滚下配置,并开启OCSP。
编辑Nginx配置文件,在server大括号中加入以下内容,并删除冲突的内容:
ssl_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #证书路径
ssl_certificate_key /[用户名]/.acme.sh/xmgspace.me/example.com.key; #私钥路径
ssl_stapling on; #开启OCSP
ssl_stapling_verify on; #开启OCSP验证
ssl_trusted_certificate /[用户名]/.acme.sh/xmgspace.me/fullchain.cer; #验证证书路径
编辑完成保存之后重启Nginx。
这样,OCSP装订就成功启用啦!要验证是否启用了OCSP,可以在SSL Lab,或者在MySSL中进行测试。另外还有一位来着国外的读者向我推荐了websiteplanet上的一个工具,但是证书信息略微有些简陋,日常维护证书用一下还可以。操作中遇到什么问题,欢迎在评论区留言哦!
什么问题导致的蓝屏?
我电脑的一个USB插口有问题,只要插口上面插了鼠标或者键盘,过一会就蓝屏,那个时候还不知道
很管用。证书申请不再失败