HSTS失效了怎么办?HTTP到HTTPS迁移修复指南
HSTS失效这个情况, 往往就是说浏览器那边不再把请求强制往HTTPS里面转了, 或者是服务器返回的响应头里没有把HSTS这个东西写进去, 再或者就是过期了, 还有一种表现就是会出现Mixed Content的警告信息。

针对这些问题, 我们需要按照一个核心的修复路径来操作, 第一步要先去检查HTTPS证书现在是不是还有效的状态, 还要确认整个站点的跳转功能是否正常运作, 第二步是把HSTS响应头的配置弄正确, 最后一步就是要去验证一下浏览器的策略到底有没有真的生效。
HSTS失效的4种常见原因
1. 证书过期或无效: HSTS依赖一个有效的TLS证书。如果证书已经过期, 或者域名和证书不匹配, 又或者签发证书的CA机构不被浏览器信任, 那么浏览器就会选择去忽略这个HSTS策略。
2. HTTP与HTTPS双活: 指的是服务器同时对80端口和443端口做出响应, 且对于80端口的访问, 并没有返回301跳转状态码。HSTS策略要求第一次的响应必须是来自HTTPS链接发出的, 如果HTTP的入口没有关闭的话, 该策略就无法建立起来。
3. 在HTTPS响应里面, 大家发现没有返回那个叫做Strict-Transport-Security的头信息, 或者出现了配置方面的错误情况, 比如把max-age设置成了0, 又或者缺少了includeSubDomains这个部分, 还有可能存在拼写错误的情况。
4. 证书链不完整: 这是因为中间证书缺少了, 导致浏览器没有办法去验证整个信任链条的正确性, 所以这种情况就会被视为不安全的连接, 并且这时候HSTS这个功能也就不能正常发挥作用。
三步修复:从HTTP到HTTPS再到HSTS
第一步:关闭HTTP入口,全站301跳转
让服务器用Nginx或者Apache这些设备, 把请求从80端口的所有事情, 全部通过301方式重定向到对应的HTTPS地址去, 要确认没有HTTP直连残留的情况存在。验证的方式就是使用curl -I http://yourdomain.com 这种方式, 预期它应当返回301这个数字结果。
第二步:部署有效证书,配置HSTS头
执行安装操作, 将证书以及完整的中间证书链条一并安装在服务器上, 这样之后通过浏览器去访问那个HTTPS协议的地址的时候, 就完全不会出现任何警告信息了。
添加HSTS响应头(Nginx示例):
在代码中添加一个头部参数, 这个参数的名称是Strict-Transport-Security, 它所关联的值是“max-age=63072000; includeSubDomains; preload”, 并且该操作的执行条件总是成立。
关于 max-age 这个指标, 它的建议数值要是大于或者等于31536000, 这个数值代表的时间是1年。如果是生产环境的话, 推荐使用63072000, 这个数值代表的时间是2年。在首次上线使用的时候, 可以把它设置得比较小一点。等确认没有出错之后, 再把它加上 preload。
第三步:验证HSTS策略生效
打开浏览器, 然后调用开发者工具, 接着找到Network这个选项, 最后去查看在HTTPS的响应里面是否存在严格传输安全这个头信息字段。
访问 chrome://net-internals/#hsts 确认域名已加入HSTS列表。
为了进行二次确认, 你可以使用命令, 也就是, curl -I https://yourdomain.com。
对SEO的影响与注意事项
搜索引擎所配备的那些用于抓取网页的蜘蛛程序, 它们同时也是会去读取关于强制使用安全传输协议这一组策略内容的。
如果在强制使用安全传输协议这一策略正在生效的这段时期内, 网站所使用的电子证书突然间就过期了, 那么蜘蛛在进行访问的时候就会遭遇全部失败的局面, 这时候那些本来应该被收录进去的页面也就暂时没办法被抓取到了, 网站的排名情况也可能会因此而出现一些短期的、不大稳定的波动现象。
当这个问题得到修复之后, 操作者其实是不需要再把网站地图再次提交一次的, 而是只需要静静地等待下一轮的系统抓取任务开始即可, 通常情况下, 大概过上一天到三天的时间, 所有的状况就会自然而然地恢复到正轨上面去了。
千万不要通过把max-age设成0这种办法,去试图“关闭”HSTS功能:在有效期还在的时候, 浏览器会直接忽略这个值,结果就是域名依然会被强制跳转到HTTPS。想要彻底清除掉相关的记录, 只能是用户得手动去浏览器的HSTS列表里把它删掉, 不然的话, 就只能等max-age的时间自然到期了。
在第一次开启HSTS这个功能之前, 你一定要去检查一下确认一下HTTPS协议是不是已经完全可用了, 这里还要包括所有的子域名, 必须保证是百分之百可用的状态, 不然的话就会出现这样的情况, 就是用户还有那些爬虫蜘蛛会被死死地锁定在HTTPS的这个入口那里, 根本没法再回去用HTTP的方式来访问了。
常见问题
《HSTS失效了怎么办?HTTP到HTTPS迁移修复指南》主要讲什么?
HSTS失效这个情况, 往往就是说浏览器那边不再把请求强制往HTTPS里面转了, 或者是服务器返回的响应头里没有把HSTS这个东西写进去, 再或者就是过期了, 还有一种表现就是会出现Mixed Con…
文章提到了哪些重点?
证书过期或无效: HSTS依赖一个有效的TLS证书;HTTP与HTTPS双活: 指的是服务器同时对80端口和443端口做出响应, 且对于80端口的访问, 并没有返回301跳转状态码
文章给出了哪些建议?
4. 证书链不完整: 这是因为中间证书缺少了, 导致浏览器没有办法去验证整个信任链条的正确性, 所以这种情况就会被视为不安全的连接, 并且这时候HSTS这个功能也就不能正常发挥作用。