服务器启用HSTS协议
hsts(http strict transport security)国际互联网工程组织ietf正在推行一种新的web安全协议,网站可以选择使用hsts策略,来让浏览器强制使用https与网站进行通信,以减少会话劫持风险。
采用hsts协议的网站将保证浏览器始终连接到该网站的https加密版本,不需要用户手动在url地址栏中输入加密地址。该协议将帮助网站采用全局加密,用户看到的就是该网站的安全版本。hsts的作用是强制客户端(如浏览器)使用https与服务器创建连接。
服务器开启hsts的方法是,当客户端通过https发出请求时,在服务器返回的超文本传输协议响应头中包含strict-transport-security字段。非加密传输时设置的hsts字段无效。
比如,https://www.williamlong.info 的响应头含有strict-transport-security: max-age=31536000; includesubdomains。这意味着两点:在接下来的一年(即31536000秒)中,浏览器只要向www.williamlong.info或其子域名发送http请求时,必须采用https来发起连接。比如,用户点击超链接或在地址栏输入 http 网址 ,浏览器应当自动将 http 转写成 https 网址。
对于nginx服务器,只要在添加strict-transport-security这个http头部信息即可。
add_header strict-transport-security "max-age=31536000";
但有一点需要注意,strict-transport-security中的max-age的时间不能小于15552000。
对于 server服务器,打开网站目录下的 web.config 这个文件,在相应的位置添加上针对 https 响应的 url 重写规则(黑体部分),并保存。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webserver>
<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>
</configuration>
开启了hsts后,你部署ssl/tls的服务检测得分就可能是a+以上了。这时候就可以加入hsts preload list。
hsts preload list是浏览器中的hsts预载入列表,在该列表中的网站,使用chrome浏览器访问时,会自动转换成https。、safari、edge浏览器也在采用这个列表。
进入,输入你的域名,然后检测结果会告诉是否符合加入hsts preload list,没有问题的话勾选确定。
当然,加入到了hsts preload list后,你可能还需要等待1-2月,待新版本的和chromium、firefox、ie等发布后,你的域名算是正式被各大浏览器承认并强制使用https访问了。