首页 > 清河洛 > 配置和使用HTTP严格传输安全(HSTS)
2019
02-21

配置和使用HTTP严格传输安全(HSTS)

HTTP严格传输安全(HSTS)是一种安全功能,web服务器通过它来告诉浏览器仅用HTTPS来与之通讯,而不是使用HTTP。

实际使用中用户很少直接在地址栏输入https://这种方式访问,而是通过点击链接或在地址栏直接输入网址然后通过3xx重定向从HTTP页面进入HTTPS页面。那么访问者在重定向前的初始会话是非加密的。这就给了中间人攻击的一个机会,重定向可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。

HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS解决了这一问题,一旦服务器发送了HSTS字段,用户将不再允许忽略警告。

注意,如果之前没有使用HTTPS协议访问过该站点,那么HSTS是不奏效的,只有浏览器曾经与服务器创建过一次安全连接并且网站通过HTTPS协议告诉浏览器它支持HSTS,那么之后浏览器才会强制使用HTTPS,即使链接被换成了HTTP。

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

Apache中设置HSTS

编辑apache网站配置文件,并加以下行:

# Optionally load the headers module:
LoadModule headers_module modules/mod_headers.so
<VirtualHost *:443>
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
</VirtualHost>

Lighttpd中设置HSTS

将下述配置增加到你的Lighttpd配置文件:

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

Nginx中设置HSTS

将下述行添加到HTTPS配置的server块中:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。