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号