
HSTS(HTTP Strict Transport Security)是国际互联网工程组织 IETF 发布的一种互联网安全策略机制。
采用 HSTS 策略的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址,从而减少会话劫持风险。
当客户端通过 HTTPS 发出请求时,服务器会在返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。
浏览器接收到这样的信息之后,在一定期限内对该网站的任何请求都会以 HTTPS 发起,而不会以 HTTP 发起再由服务器重定向到 HTTPS。
1 | Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload] |
参数说明:
max-age(单位是秒):用来告诉浏览器在指定时间内,这个网站必须通过 HTTPS 协议来访问。也就是对于这个网站的 HTTP 地址,浏览器需要先在本地替换为 HTTPS 之后再发送请求。
includeSubDomains(可选参数):如果指定这个参数,表明这个网站所有子域名也必须通过 HTTPS 协议来访问。
preload(可选参数):一个浏览器内置的使用 HTTPS 的域名列表。
Chrome:完美支持
Firefox:完美支持
Safari:Safari 7 起开始支持(2013年)
IE:IE11 起开始支持(包括后面的 Edge)
Opera:完美支持
iOS:iOS 7.1 起开始支持
Android:Android 4.4 起开始支持
max-age 我们这里设置为 365 天。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<add value="index.php" />
</files>
</defaultDocument>
<staticContent>
<remove fileExtension=".htm" />
<remove fileExtension=".html" />
<mimeMap fileExtension=".html" mimeType="text/html;charset=utf-8" />
<mimeMap fileExtension=".htm" mimeType="text/html;charset=utf-8" />
<mimeMap fileExtension=".mp4" mimeType="application/octet-stream" />
</staticContent>
<rewrite>
<rules>
<rule name="redirect to HTTPS" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</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>
<location path="favicon.ico">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="31.00:00:00" />
</staticContent>
</system.webServer>
</location>
</configuration>

浏览器内置一份可以定期更新的列表,对于列表中的域名,即使用户之前没有访问过,也会使用 HTTPS 协议。
目前这个 Preload List 由 Google Chrome 维护,Chrome、Firefox、Safari、IE 11 和 Microsoft Edge 都在使用。
max-age 至少需要 1 年(31536000 秒)。
必须指定 includeSubdomains 参数;
必须指定 preload 参数;
如果您正在从 HTTPS 站点提供额外的重定向,则该重定向必须仍具有 HSTS 标头(而不是其重定向到的页面)。
即便满足了上述所有条件,也不是一定就能进入 HSTS Preload List。
提交的申请并不是自动处理的,人工处理也许需要一周到几周。
即便你已经列入到这个列表,但是依旧需要几个月才能逐渐从 Chrome 的 canary 更新通道更新到 dev 、beta 等通道,直到最后的 stable 通道。
换句话说,只有 HTTPS 骨灰粉才应该考虑加入。
转载请保留原文链接:https://www.hangge.com/blog/cache/detail_1890.html
吉公网安备 22020202000301号