什么是HSTS以及如何在Nginx上启用它
什么是HSTS
HSTS代表HTTP严格传输安全性。 HSTS告知Web浏览器,它们应始终通过https与服务器交互。
我们越来越多地看到网站通过HTTPS提供内容。 普通的https网站使用301永久重定向将不安全的http请求重定向到https。 例如,每次您在浏览器地址栏中键入以下URL时,
http://www.linuxbabe.com
您将被重定向到
https://www.linuxbabe.com
此重定向在服务器端完成。 当服务器收到http请求时,它会向浏览器发送一条消息,告诉浏览器该HTTP请求已被服务器丢弃,浏览器需要发送一个https请求。
HSTS的作用是,它告诉网络浏览器将来将内部HTTP请求重定向到https。 因此,现在重定向是在浏览器端完成的。
如果用户未指定协议方案,则HSTS告诉浏览器默认为https。 如果www.linuxbabe.com未启用HSTS,则当用户在地址栏中输入以下内容时:
www.linuxbabe.com
浏览器将首先尝试将http请求发送到服务器。
如果www.linuxbabe.com启用了HSTS,则用户在浏览器地址栏中输入www.linuxbabe.com,浏览器将首先尝试向服务器发送https请求。
HSTS有助于减少往返时间和服务器负载,同时防止中间人攻击。
在Nginx上启用HSTS
打开您的Nginx虚拟主机配置文件。 在服务器块中添加以下行:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
如下所示:
server { listen 443 ssl; server_name www.linuxbabe.com; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; ......
保存并关闭文件。 然后重新加载Nginx配置。
sudo service nginx reload or sudo sytemctl reload nginx
检查HSTS是否正常工作
Google Chrome开发人员工具
在谷歌浏览器中,按 F12 打开开发人员工具的键,请点击 网络 标签。 然后使用http方案输入您的域名:
http://www.linuxbabe.com
您会在网络标签中看到第一个http请求由Google Chrome在内部重定向,并且永远不会在线上进行。 状态码307表示内部重定向。
卷曲命令
发出以下命令
curl -I https://yourdomain.com
您会看到一个 严格的运输安全 标头。
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
securityheaders.io服务
securityheaders.io是一项免费服务,可检查您的网站以查看您的网站是否具有包含Strict-Transport-Security标头的安全标头。 它告诉您站点包含哪些安全标头以及站点缺少哪些安全标头。
初次使用时的信任
HSTS很棒,但是仍然存在豆腐问题。 TOFU代表首次使用信任。 假设您以前从未访问过baidu.com这样的网站。 在浏览器地址栏中输入baidu.com时,浏览器将向baidu.com发送一个http请求。 baidu.com告诉您浏览器发送https请求。 然后baidu.com使用HTTP标头响应,该标头包含Strict-Transport-Security标头和浏览器的HTML页面。
仍然有一个http请求可以被中间人攻击利用。 为了解决此问题并保护您的网站,您可以通过将网站提交到https://hstspreload.appspot.com来在浏览器中预加载HSTS策略。