服务器如何启用HSTS协议|SSL/TLS服务检测A+设置

作者 by nkdns / 2022-05-08 / 暂无评论 / 553 个足迹

启用HSTS协议,让SSL/TLS检测轻松上A+


HSTS介绍

当使用http协议的网站经常被浏览器标为不安全的今天,站长们纷纷申请起了SSL证书,转入了https协议的行列。有时候我们做SSL/TLS检测的时候会发现明明已经转成了https协议,为什么检测起来网站看起来还没有那么安全呢?怎么总有些协议没开呢?今天我们就来聊一下SSL/TLS检测项——HSTS协议。

HSTS是HTTP 严格传输安全(HTTP Strict Transport Security) 的缩写。是国际互联网工程组织IETF正在推行一种新的Web安全协议。这是一种网站用来声明他们只能使用安全连接(HTTPS)访问的方法。 如果一个网站声明了 HSTS 策略,浏览器必须拒绝所有的 HTTP 连接并阻止用户接受不安全的 SSL 证书。 目前大多数主流浏览器都支持 HSTS (只有一些移动浏览器无法使用它)。

为什么要使用HSTS协议呢?主要是为了避免用户遭受使用 SSL stripping(剥离) 的 中间人攻击(man-in-The-middle,MITM)。 SSL stripping 是一种攻击者强迫浏览器使用 HTTP 协议连接到站点的技术,这样他们就可以嗅探数据包,拦截或修改敏感信息。 另外,HSTS 也是一个很好的保护自己免受 cookie 劫持(cookie hijacking)的方法。

有关文章:

HSTS设置

服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。

比如,https://vinci-studios.com 的响应头含有Strict-Transport-Security: max-age=31536000; includeSubDomains。这意味着两点:在接下来的31536000秒(一年)中,浏览器只要向vinci-studios.com或其子域名(①子域务必关注https证书情况②子域也可以单独开HSTS)发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入 http 网址 ,浏览器应当自动将 http 转写成 https 网址。但是要注意max-age的时间不能小于15552000。

对于nginx服务器,只要在添加Strict-Transport-Security这个HTTP头部信息即可。

add_header Strict-Transport-Security "max-age=31536000";

对于Windows server服务器,打开网站目录下的 web.config 这个文件,在相应的位置添加上针对 https 响应的 url 重写规则(部分,前面的部分含义是将http转写到https),并保存。

<?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是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

有关链接:

进入* hstspreload官网(需要翻墙),输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。

当然,加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了。

独特见解