Let's Encrypt证书:国内服务器无法申请?国外服务器访问缓慢?你需要OCSP装订

CDN测评 0 69

前言

最近,有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出现问题时,会有两个影响:

  1. 服务器端无法正常申请或续期SSL证书。

  2. 客户端浏览速度缓慢,尤其是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提供商也大都能使用这种方法申请证书。

  1. 国内服务器需要先修改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

  • 稍微一等,Let's Encrypt泛域名证书就申请好啦!而且acme.sh会在域名过期前几天续期证书。下面讲如何配置证书,以及Nginx开启OCSP装订。

    Nginx开启OCSP装订

    申请到的证书存放在~/.acme.sh/example.com文件夹下,这个文件夹下面会肯定有这两个文件:

    • fullchain.cer

    • example.com.key

    我们就要用到这两个文件,修改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

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。