Nginx之OCSP stapling配置

摘要: 正确地配置OCSP stapling, 可以提高HTTPS性能。

什么是OCSP stapling?

OCSP的全称是Online Certificate Status Protocol,即在线证书状态协议。顾名思义,它是一个用于检查证书状态的协议,浏览器使用这个协议来检查证书是否被撤销。使用Chrome浏览器查看https://www.fundebug.com的证书详情,可以看到OCSP的查询地址:

Fundebug使用的是Let’s Encrypt的免费证书,其OCSP查询地址是http://ocsp.int-x3.letsencrypt.org/,浏览器需要发送请求到这个地址来验证证书状态。

OCSP存在隐私性能问题。一方面,浏览器直接去请求第三方CA(Certificate Authority, 数字证书认证机构),会暴露网站的访客(Let’s Encrypt会知道哪些用户在访问Fundebug);另一方面,浏览器进行OCSP查询会降低HTTPS性能(访问Fundebug会变慢)。

为了解决OCSP存在的2个问题,就有了OCSP stapling。由网站服务器去进行OCSP查询,缓存查询结果,然后在与浏览器进行TLS连接时返回给浏览器,这样浏览器就不需要再去查询了。这样解决了隐私性能问题。

检测OCSP stapling

SSL Labs能够对开启HTTPS的网站的SSL配置进行全面分析,可以检测OCSP stapling的状态。

www.fundebug.com进行检查,会发现OCSP stapling是开启的:

kiwenlau.com进行检查,会发现OCSP stapling是关闭的:

配置OCSP stapling

在查询Nginx日志时,我发现了这样的报错信息:

2018/02/27 02:58:11 [warn] 10#10: no resolver defined to resolve ocsp.int-x3.letsencrypt.org while requesting certificate status, responder: ocsp.int-x3.letsencrypt.org, certificate: "/etc/letsencrypt/live/www.fundebug.com/fullchain.pem"

可知,是resolver属性木有配置导致的。resolver属性用于指定DNS服务器地址, OCSP查询地址ocsp.int-x3.letsencrypt.org需要解析为IP地址。

根据Nginx文档,最好使用本地DNS服务,可以防止DNS欺骗(DNS spoofing)。使用公共的DNS服务,例如Google Public DNS(8.8.8.8和8.8.4.4 ),都存在安全隐患。

To prevent DNS spoofing, it is recommended configuring DNS servers in a properly secured trusted local network.

因此,resolver最好配置为127.0.0.1,即本地DNS服务:

resolver 127.0.0.1;

由于本地并没有DNS服务,因此配置resolver之后Nginx会出现以下报错:

2018/02/28 15:35:47 [error] 8#8: send() failed (111: Connection refused) while resolving, resolver: 127.0.0.1:53

这时应该在本地运行一个DNS服务,例如dnsmasq。我们Fundebug所有服务包括Nginx都运行在Docker里面,因此dnsmasq直接运行在Docker里面就好了,这样省去了安装与配置的步骤:

sudo docker run -d --name=dnsmasq --net=host --cap-add=NET_ADMIN andyshinn/dnsmasq:2.75 --log-facility=-

Nginx的OCSP stapling完整配置如下:(此处省略了其他无关的配置选项)

http{ resolver 127.0.0.1; server { ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/www.fundebug.com/chain.pem; }}

参考

版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/03/07/nginx_ocsp_stapling/

您的用户遇到BUG了吗?

体验Demo 免费使用

.copyright * { box-sizing: border-box; }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木制robot技术杂谈

Ubuntu 架设 OpenVPN 实现内网穿透

家里的网络因为没有公网 IP,有时候想要连接到家里的树莓派或者电脑就无法实现。这个时候可以采用内网穿透的方法远程连接家中的机器,内网穿透的方案有很多,下面介绍一...

2.4K3
来自专栏安智客

Android安全启动功能

验证启动(安全启动)功能旨在保证设备软件(从硬件信任根直到系统分区)的完整性。在启动过程中,无论是在每个阶段,都会在进入下一个阶段之前先验证下一个阶段的完整性和...

38510
来自专栏程序员宝库

更快更安全,HTTPS 优化总结

在网站升级到 HTTPS 之后,我们还可以有很多玩意可以折腾,优化 HTTPS,让它更快更安全。这里是一篇 HTTPS 优化的总结,也包含问题的解决方法,不过不...

86811
来自专栏小夜博客

LNMP环境配置SSL证书最简单教程

90813
来自专栏编程之旅

腾讯云上免费部署HTTPS

最近在写微信小程序的时候,微信小程序需要所有的请求接口都部署在https协议上,于是就研究了一下怎么在腾讯云上部署https环境,发现还是比较简单的,首先我的服...

5.7K5
来自专栏Golang语言社区

Go代码打通HTTPs

TL;DR 手工创建CA证书链,手写代码打通HTTPs的两端 HTTPs最近是一个重要的话题,同时也是一个有点难懂的话题。所以网上有大量的HTTPs/TLS/S...

3664
来自专栏开源项目

Git 项目推荐 | 开源 PHP 加密运行扩展

开源php加密运行扩展,基于screw二次开发,暂时只能在linux下运行 。 oschina http://git.oschina.net/splot/php...

52313
来自专栏云计算教程系列

如何在Ubuntu上使用SSL来保护Nginx

腾讯云SSL是腾讯云的证书颁发服务,SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶...

3852
来自专栏JackeyGao的博客

Django OAuth2 和 JWT 案例

在重写 Ansible 监控平台时, 需要前后端分离, 并且需要使用公司的账户系统。 而前后端认证我一直采取的 JWT 认证规范,具体为什么这么选择, 这里不多...

1164
来自专栏流柯技术学院

虚拟硬盘格式vdi、vhd、vmdk相互转换

Windows7的引导程序能够引导vhd格式的虚拟硬盘,而VirtualBox创建的虚拟硬盘文件是vdi格式的,怎么办呢? 以前要借助其他软件才能实现,但是V...

1232

扫码关注云+社区