这篇文章算是对这篇文章《Nginx的SSL配置优化》的一个补充,因为上面用到了OCSP Stapling,没有作太多的解释。所以补上,而且刚好看到Jerry Qu的这篇文章 via ,看了几遍,也看了一些其他的,大概简单介绍,详情请浏览他的文章。这里只简单引用介绍:
OCSP(Online Certificate Status Protocol,在线证书状态协议)是用来检验证书合法性的在线查询服务,一般由证书所属 CA 提供。某些客户端会在 TLS 握手阶段进一步协商时,实时查询 OCSP 接口,并在获得结果前阻塞后续流程。OCSP 查询本质是一次完整的 HTTP 请求 - 响应,这中间 DNS 查询、建立 TCP、服务端处理等环节都可能耗费很长时间,导致最终建立 TLS 连接时间变得更长。
而 OCSP Stapling(OCSP 封套),是指服务端主动获取 OCSP 查询结果并随着证书一起发送给客户端,从而让客户端跳过自己去验证的过程,提高 TLS 握手效率。
这里的实践环境是CentOS7,SSL的证书是Comodo Positive SSL,
配置OCSP Stapling
先串联一个pem文件,文件含有中间证书和根证书,因为Comodo Positive SSL是有两个中间证书,依次从子到父串联好,不需要站点证书
cat COMODOECCDomainValidationSecureServerCA.crt COMODOECCAddTrustCA.crt AddTrustExternalCARoot.crt > chaine.pem
串联生成的 chaine.pem 放在你想放的目录下,我是放在 /usr/local/nginx/conf/vhost/sslkey
下
然后打开你的Nginx的站点配置文件,假设我的配置文件是在 /usr/local/nginx/conf/vhost
的目录
vim /usr/local/nginx/conf/vhost/www.linpx.com.conf
在 server{}
的括号内加入
ssl_trusted_certificate /usr/local/nginx/conf/vhost/sslkey/chaine.pem;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
检查是否生效
方法一
执行下面命令,域名换成你的即可
openssl s_client -connect www.linpx.com:443 -showcerts < /dev/null 2>&1
列出一堆信息后,拉到最后
Start Time: 1243052074
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
或者是
Start Time: 1457861201
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
我在两台机子测试,一台是国内,另外一台是国外,测试图如下:
如果是 code:20
的情况,可以 将 https://www.terena.org/activities/tcs/repository/AddTrust_External_CA_Root.pem 这文件存为 root.pem,再指定 -CAfile 去测试,如
openssl s_client -CAfile root.pem -connect www.linpx.com:443 -status -tlsextdebug < /dev/null 2>&1
返回
Start Time: 1243052074
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
之所以会有 code:20
,在Stack Overflow上检索了一下相关问题,如 http://stackoverflow.com/questions/21161079/openssl-unable-to-get-local-issuer-cert-return-code-20 还是不思其解··· 但应该好像没问题的吧···下回分解···
方法二
这个方法有点类似于在 https://ssllabs.com/ssltest/index.html 上做的测试···
打开 https://www.digicert.com/help/ ,输入你的域名在唯一可见文本框内,回车
等一会,查看状态
如我的linpx.com
更新(2016年3月15日20:13:13)
修改了因为认识不够充分的错误语句。
参考
- imququ.com/post/why-can-not-turn-on-ocsp-stapling.html
- www.cyberciti.biz/faq/test-ssl-certificates-diagnosis-ssl-certificate
- www.digicert.com/ssl-support/nginx-enable-ocsp-stapling-on-server.htm
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
站长的主题很不错,非常喜欢你的分享,希望可以保持更新!
谢谢 :P
昨天又研究了下,发现 ubuntu 实际上是有那个根证书的,但是不知道为什么不会使用。我的 RapidSSL 就没问题。
$ openssl x509 -in /usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt -noout -subject
subject= /C=SE/O=AddTrust AB/OU=AddTrust External TTP Network/CN=AddTrust External CA Root
我用国外的vps,系统是CentOS6 测试一下 直接通了······· code 0
额,浏览了一下在 Stack Overflow 的相关问题,好像仅仅对GeoTrust Certificate是有效的。
http://stackoverflow.com/questions/21161079/openssl-unable-to-get-local-issuer-cert-return-code-20 这篇文章针对Google的也是一样code 20