前言
2020年,四大主流浏览器计划不再支持 TLS 1.0 和 1.1。这些旧版本容易受到攻击和利用,不再具备实用性。
现在请尽快启用或升级到 TLS 1.2 或 1.3,以防止中断、停机和用户不满的事件发生。
本文分享一下如何加固nginx的安全性,从如何检测网站安全性说起
工具
myssl,提供了各种工具,其中包含了网站安全检测工具。
mozilla-ssl-config,生成各服务器SSL配置的工具。
ssllabs,网站检测工具
NGINX提高安全性
针对nginx的配置
全站HTTPS
建议全站使用https,漏网之鱼会大大降低整体安全性
使用高TLS版本
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
注意:
ssl_protocols
一定去掉TLSv1.0和TLSv1.1,以及更老旧的SSL协议nginx下不允许出现有个别server指定了更低版本的
ssl_protocols
,否则可能会导致启用失败如果要使用TLSv1.3版本,则必须升级OpenSSL到支持TLSv1.3的1.1.1以后的版本
nginx依赖OpenSSL,nginx这里配置了TLSv1.3,那么OpenSSL首先要支持TLSv1.3才行
ssl_ciphers
指定通信加密使用的算法,可以从openssl ciphers -v
命令的返回结果中挑选可同时指定多个算法,以冒号分隔
openssl ciphers -v
返回结果要注意算法支持的TLS协议版本要和ssl_protocols
内指定的相同ssl_prefer_server_ciphers
,是否由服务器决定采用哪种加密算法,设置为off
严格的HTTPS连接(HSTS)
HTTP Strict Transport Security (HSTS)
指示浏览器只使用 HTTPS 连接到目标服务器。这可以防止一些潜在的中间人攻击,包括 SSL 剥离,会话 cookie 窃取(如果没有被 适当保护)。如果遇到任何与证书相关的错误,它还可以阻止浏览器连接到网站。当浏览器访问一个设置相应 HTTP header 的 HTTPS 网站时,HSTS 将被激活。
建议设置 HSTS header 长的生命周期,最好是半年及以上。
add_header Strict-Transport-Security "max-age=31536000";
控制Frame策略
控制站点是否可以放置在
<iframe>
,<frame>
或<object>
标签。不允许使用框架可以防止 clickjacking 攻击。例如,从 2015 年 2 月起,Internet Explorer’s universal cross-site-scripting bug 就被这个消息头减轻了。
X-Frame-Options
是一个非标准的 header,在内容安全策略级别 2 中被 frame ancestor 指令所取代。然而,frame ancestor 还没有得到普遍的支持,而X-Frame-Options
得到了广泛的支持。
如果你确定,网站将不会被用于内嵌在frame中,则可以设置:
add_header X-Frame-Options deny;
如果网站有页面会需要内嵌在frame中,则需要相对宽松的设置:
add_header X-Frame-Options SAMEORIGIN;
禁止XSS
跨站点脚本(XSS 或 CSS)的保护被构建到大多数流行的浏览器中,除了 Firefox 之外。这种保护是用户可配置的,可以关闭。因此,明确要求浏览器在你的网站上使用它的 XSS 过滤器是个好主意。
add_header X-Xss-Protection: "1; block";
隐藏nginx版本号
隐藏nginx的版本号,能提高一些安全性
server_tokens off;
配置OCSP Stapling
OCSP的全称是Online Certificate Status Protocol,即在线证书状态协议
在服务器上部署OCSP Stapling能极大的提高安全稳定性能、降低客户端验证请求延迟,减少等待查询结果的响应时间,用户体验更好
ssl_stapling on;
ssl_stapling_verify on;