什么是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策略。

HSTS预载

Sidebar