本文最后更新于2022-11-5,已经有11 天没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
这里帮大家了解一下什么是HSTS和如何使用HSTS以及他的作用,可以有效防劫持,提高ssl的安全性,能开启的尽量开启,一般的cdn平台(如cdnfly、又拍云、七牛云等)都可以设置hsts,如果不太懂略过就行,比较适用于对安全较高的站长。
HTTP严格传输安全协议(英语:HTTP Strict Transport Security,简称:HSTS),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。
众所周知的原因,国内运营商对于http劫持非常严重。你一个无广告的站点在某些地区访问时运营商自动给你加上广告。
现在还好,大部分是加运营商自己手机套餐相关的广告,以前经常内外合作放一些传奇私服等灰色广告。
第二个原因是,很多人自己用的网站。比如我的下载服务器上搭建的有Aria2,里面会下载一些文件之类。有时候文件名就含有违规词,HTTP访问会被墙直接检测到违规词。这可能就会造成你的域名被屏蔽或是DNS污染。如果是HTTPS的话,我们访问的内容就无法被看到了。这个也可以叫做中间人攻击。
最重要的原因,正常访客访问https地址实际是先请求服务器的http,然后服务器返回跳转https的信息,访客再加载https地址的内容。
在访客首次访问还未跳https时,非常容易受到攻击。比如墙直接给你阻断,或者直接劫持第一次的http请求。如下图
目前HSTS有两种实现方式,两个方式有一些本质区别。下面我分别讲下两种开启的方式和区别。
3.1.服务器配置文件开启HSTS
我们可以在服务器的配置文件中添加对应的响应头,然后访客后期访问时浏览器会记录下有这个响应头的域名,自动在浏览器就从http跳转到https。
在添加下面的响应头后,需要开启http强制跳转https。
宝塔面板在SSL设置界面可以直接开启。其他环境我会在下面写出来。
在配置文件加入下面的响应头
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
http自动跳转https
return 301 https://$host;
//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"
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相关设置。
例如阿里云:
3.2.提交到HSTS列表清单
列表清单(HSTS Preload List Submission)可以理解为支持HSTS的一个列表清单。支持HSTS的浏览器都会自动查询HSTS列表,如果检测到域名在清单内,他就会直接访问https地址。从而省去了访客第一次访问http地址的情况。
提交地址:HSTS Preload List Submission
请注意!加入HSTS Preload List Submission后是无法轻易撤销的。同理生效也是很慢。
如果你加入后想再撤销,大概最低也需要几个月的时间才会生效。
在HSTS Preload List Submission的提交界面输入我们的一级域名。例如cheshirex.com,不要带www的地址。
然后在提交HSTS Preload List Submission前,我们也需要在服务器配置文件加入第一步写的响应头!否则无法添加。
谷歌浏览器可以输入chrome://net-internals/#hsts来访问浏览器本地的HSTS域名列表,我们可以自己添加或删除。这个操作只影响你的本地浏览器。
宝塔面板的nginx配置文件中默认有HSTS配置,但是他不全。我们提交到预加载列表的话会提示有两个HSTS配置。
大概在23行,删除
add_header Strict-Transport-Security “max-age=31536000″;
即可。
HSTS是一项很好的功能,但是他的退出流程比较慢。需要你谨慎考虑后再进行选择。一旦你的域名加入HSTS后,整个域(包括所有二级域名)都必须使用https访问!
如果你只是想体验下HSTS,可以仅在服务器配置文件添加上响应头。并更改生效时间。
例如一周
add_header Strict-Transport-Security “max-age=604800; includeSubdomains; preload”;
#5分钟 max-age=300; #1周 max-age=604800; #1个月 max-age=2592000; #1年 max-age=31536000; #2年 max-age=63072000;
原文链接:https://blog.wm404.com/2022/11/05/92689539.html
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/17582