随记(四):简述HSTS协议

HSTS协议概要

HSTS意为严格传输安全协议(英语:HTTP Strict Transport Security),其最为核心的是一个HTTP响应头(HTTP Response Header),正如图所示:

在这里插入图片描述
HSTS Header的语法如下:

Strict-Transport-Security: max-age=XXX; includeSubDomains; preload
  • max-age是必填参数,是一个以秒为单位的数值,它代表着HSTS响应头的过期时间,通常设置为一年,即31536000秒。
  • includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护。
  • preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表时,才需要使用到它。

(Tips:在生产环境下使用HSTS机制时,建议先将max-age参数的值设置小一些(如:若干分钟),检查HSTS是否能正常工作,网站能否正常访问,然后再逐步将时间延长(如:一周/一个月),并在这个时间范围内继续检查HSTS是否正常工作,最后才改到一年。这是因为当网站证书有问题时,一旦浏览器接收到HSTS Header ,那么用户将在有HSTS效期间内,直到证书错误被修复,或者用户主动清除浏览器缓存为止,都无法访问到你的网站。)

HSTS作用

HSTS的作用是强制客户端(如:浏览器)使用HTTPS与服务器创建连接,用户无需手动在URL地址栏中输入HTTPS,浏览器始终保持HTTPS链接访问网页。
使用HSTS可以做到让浏览器强制拒绝不安全的链接,不给用户选择的机会。

在没有HSTS保护的情况下,当浏览器发现当前网站的证书出现错误,或者浏览器和服务器之间的通信不安全,无法建立HTTPS连接的时候,浏览器通常会警告用户,但是却又允许用户继续不安全的访问。而有了HSTS后,浏览器将会彻底阻止用户继续访问。

在这里插入图片描述

HSTS配置方法

  • Nginx服务器 - 配置
## 在config.conf配置文件中添加以下指令
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  • Apache服务器 - 配置
  1. 在httpd.conf文件中加载headers模块:
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
  1. 在VirtualHost 0.0.0.0:443中添加下面代码行:
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
  1. 重启Apache服务器。
  • IIS服务器 - 配置
    在web.config文件中添加下列命令行进行配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
    <rewrite>
        <rules>
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
                </conditions>
                <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                    redirectType="Permanent" />
            </rule>
        </rules>
        <outboundRules>
            <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                <match serverVariable="RESPONSE_Strict_Transport_Security"
                    pattern=".*" />
                <conditions>
                    <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                </conditions>
                <action type="Rewrite" value="max-age=31536000" />
            </rule>
        </outboundRules>
    </rewrite>
</system.webServer>
</configuration>
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页