之所以想起要启用HSTS,主要是最近不少的朋友说网站打不开了,虽然Ping值一切正常,但是就是网页无法访问。猜测可能是DNS解析这一环节出了问题。另外自己本地的DNS劫持已经到了“丧心病狂”的地步了,不加Https访问京东淘宝等全部被加入各种推广。
启用HSTS后自然想要加入HSTS Preload List了,这是各大浏览器都遵循的一个强制使用Https访问的网站列表,只要加入到这个列表中,所有的通过浏览器访问请求都会强制走Https,这在很大程度上可以杜绝“第一次”访问的劫持,最大限度地提高Https访问的安全性。
需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.wzfou.com这样的二级域名形式访问,你需要先停止301跳转,即要保证wzfou.com这样的根域名是用Https可以访问到的。(PS:之前我有一个网站就是这样的情况,如有变化大家在申请时结合具体情况分析)。
HSTS是在服务器强化Https安全,如果你的网站还没有启用Https,可以试试免费的SSL证书Let’s Encrypt,最近还推出了免费泛域名证书:Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程,更多的关于建站的经验与技巧,你可以看看:
PS:2018年8月6日更新,服务器启用SSL证书其实也是一种资源开消,如何最大限度地减少这种资源消耗提升https访问速度,参考这里:八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗。
HSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。
编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:
# 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"
保存 Apache 配置文件,然后重启。现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数),这个失效时间每次都会设置为两年后。
Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
如果你发现直接添加在 server 块中无效的情况,你可以试试直接插入到 location ~ *php 内:
location ~ [^/]\.php(/|$) { add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; }
这里还有一种配置方式,配置保存后重启 Nginx 服务。
map $scheme $hsts_header { https "max-age=31536000; includeSubDomains; preload"; } server { ......(others) add_header Strict-Transport-Security $hsts_header; ......(others) }
将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):
server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload") }
编辑保存后记得重启一下。
将以下代码添加到网站根目录 index.php 中或者header.php中
header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");
开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。ssllabs官网以及演示如下:
HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。
直接打开Chrome查看网络,就可以看到头部已经包含了HSTS信息了。
将wzfou.com以及任意二级域名都要做好Http跳转到Https,启用了HSTS后请求地址为 header 头中的 Location
会显示307 ,即要求浏览器继续向 Location 的地址 POST 内容。
进入hstspreload官网,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。(点击放大)
HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。
直接到下列网址搜索是否有你的域名即可:
当然,加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了,你可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。
官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。
由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。
那么哪些网站适合加入HSTS Preload List?个人博客或者网站可以来玩一玩,对于安全性要求比较高的电商网站,会员管理后台等完全可以使用HSTS Preload List,对于一些有Http需要的还是不加入得好。
文章出自:挖站否 https://wzfou.com/hsts-preload/,部分内容参考自泪雪博客 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
文章更新于: 2021年2月6日 上午11:27
查看评论
碰到Warning: Unnecessary HSTS header over HTTP可以试试这个:
Header set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" env=HTTPS
在这里面看见的解决方法:https://stackoverflow.com/questions/45022897/warning-unnecessary-hsts-header-over-http
感谢提供。
你的设置好像有问题。使用这样写法可以完善:
https://www.iowen.cn/when-applying-for-hsts-warning-unnecessary-hsts-header-over-http-method/
好的,已经更新。
请问站长,阿里云香港https访问打不开如何解决呢,使用另一个主机商的服务器反向代理可以解决吗?
Ping一下是不是IP的问题,如果是IP的问题可以采用+CDN或者反向绑定域名的方式解决,否则如果是域名的问题话,就得换域名了。
嗯,之前看到你也有说过阿里云香港https问题,https打不开http能打开,请问您是怎么解决的呢,谢谢了
我换成美国的CN2的VPS了,就没有这样的情况了。
谢谢分享,不过提醒一下,广告劫持通常与DNS过程无关哦,HSTS也无法规避由DNS劫持带来的网站打开错误
有些劫持不是在http中插入的吗?
Nginx 安全配置,做个示例
nginx.conf
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header X-Frame-Options deny;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection: 1; mode=block
对了,如何启用LibreSSL(oneinstack已编译了它吗),然后支持CHACHA20?
add_header X-XSS-Protection: 1; mode=block
应该写为
add_header X-XSS-Protection "1;mode=block";
多于一个参数需要引号和分号,同“Strict-Transport-Security ”写法
否则报错哦~
oneinsack不支持LibreSSL,可以自己编译进去,支持CHACHA20,看到这个作者采用了此方法:https://iiong.com/https-encryption-chacha20-poly1305.html
Debian9的OpenSSL现在好像是1.1.0,支持CHACHA20吗如何启用
OpenSSL好像不行,得替换成LibreSSL才行。
oneinsack已启用ALPN了吗,https://sunflyer.cn/archives/406,我是用Debian,那份脚本直接粘贴进Shell执行就好了?非常感谢Qi,向我推荐了优雅的主题,多多益善哈! Material Design♥
他写出的那些 主题框架和https://demos.creative-tim.com/material-kit-pro/presentation.html,这些是做主题的吧,但好像很难做出,不如买iiong.com的?
站长用的主题、组件、模块有哪些?全部友链都在朋友圈?
oneinsack已启用ALPN了,直接粘贴执行那段命令就可以了。
全部友链在朋友圈。购买主题的话还是用国人的好一些,国外的可能功能强大一些,但是很多功能在国内基本上用不着,还得自己修改。
用中文的和英文的站测出来的是两个不同的,英文的是a+,中文的还是B+
中文的那个网站好像用的国外的,所以还是以国外的那个为准。
感谢Qi,网站成功加入了。
Warning: Unnecessary HSTS header over HTTP
The HTTP page at http://xn--nf1a578axkh.xn--fiqs8s sends an HSTS header. This has no effect over HTTP, and should be removed.
提交成功,不过有这个提示,刚才那条评论发送成功了没
这个是因为80 433监听在同一个server下,把监听80的server独立出来就好[阴险]
我也是这样,是因为用了301跳转,但是只要不影响HSTS就可以了。
这个是因为80 433监听在同一个server下,把监听80的server独立出来就好
好像没收到贵站的评论回复通知邮件?
出现错误提示:Invalid "To" e-mail address "i@xn--nf1a578axkh.xn--fiqs8s"。好像是邮箱的问题。
那我下次换个邮箱评论了 :-D
哈哈,现在正常了。
嗯,收到了,不过是在垃圾邮件里
提交成功,不过有个Warning提示
Warning: Unnecessary HSTS header over HTTP
The HTTP page at http://xn--nf1a578axkh.xn--fiqs8s sends an HSTS header. This has no effect over HTTP, and should be removed.
博主,你的博客评论无法提交:{"error":"get from image source failed: E405"}
谢谢提醒,已修复好,七牛云cdn导致评论出问题的。
还是不能访问啊,和以前一样,换证书大概也米用,还有你开了什么缓存?没有设置登录用户重定向啊,登录以后不会自动刷新跳转,得手动刷新才显示登录状态,我说登录了想评论一看还得输入邮箱,再一看没有登录,还是静态页面,刷新就显示登录了
非电信的用户访问的是103.27.186.199 这个缓存节点,需要手动刷新才行。还有一个是源站:47.52.169.125 。
加一贴,nginx官方给出的配置参数不太一样,是这样的:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
并且(这段我没太看懂),官方的说法称如果写在location段中,要再声明一遍STS头?
https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/
是的,
always
貌似NGINX 1.7.5 以前的版本不支持,preload和always应该都可以。然而always 不能通过https://hstspreload.org检测....
后期应该可以了。
原来如此