广告投放

网站开启HSTS的详细教程

HSTS是什么?

HTTP严格传输安全协议(英语:HTTP Strict Transport Security,简称:HSTS),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。

为什么要开启HSTS?

众所周知的原因,国内运营商对于http劫持非常严重。你一个无广告的站点在某些地区访问时运营商自动给你加上广告。

现在还好,大部分是加运营商自己手机套餐相关的广告,以前经常内外合作放一些传奇私服等灰色广告。

第二个原因是,很多人自己用的网站。比如我的下载服务器上搭建的有Aria2,里面会下载一些文件之类。有时候文件名就含有违规词,HTTP访问会被墙直接检测到违规词。这可能就会造成你的域名被屏蔽或是DNS污染。如果是HTTPS的话,我们访问的内容就无法被看到了。这个也可以叫做中间人攻击。

最重要的原因,正常访客访问https地址实际是先请求服务器的http,然后服务器返回跳转https的信息,访客再加载https地址的内容。

在访客首次访问还未跳https时,非常容易受到攻击。比如墙直接给你阻断,或者直接劫持第一次的http请求。如下图

网站开启HSTS的详细教程

HSTS开启方式

目前HSTS有两种实现方式,两个方式有一些本质区别。下面我分别讲下两种开启的方式和区别。

1.服务器配置文件开启HSTS

我们可以在服务器的配置文件中添加对应的响应头,然后访客后期访问时浏览器会记录下有这个响应头的域名,自动在浏览器就从http跳转到https。

在添加下面的响应头后,需要开启http强制跳转https。

宝塔面板在SSL设置界面可以直接开启。其他环境我会在下面写出来。

nginx

在配置文件加入下面的响应头

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

http自动跳转https

return 301 https://$host;

apache

# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so

#然后对应站点VirtualHost里面插入HSTS响应头信息
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

#将所有访问者重定向到HTTPS。
RedirectPermanent / https://host

Lighttpd

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

虚拟主机空间

如果你的是虚拟主机,无法编辑web服务配置文件的话。可以将以下代码添加到网站的index文件中。建议加到顶部。

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

上面所有响应头都有个数字63072000,这个代表2年的意思。意思为该配置有2年有效时间。访客第一次访问后2年都自动生效。

通过上面的方式添加在服务器配置文件后,后续访客访问会自动在访客本地完成http到https的跳转。

但是他也有个缺陷,只有访客首次访问后才会读取到该配置。也就是说该配置对于访客第一次访问是没有效果的。

那么如何让访客首次访问就生效呢?这就需要第二种方法,请看下文。

如果你使用了CDN加速,还应该在CDN上进行HSTS相关设置。

例如阿里云:

网站开启HSTS的详细教程

(完)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
广告位招租919838898
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索