HSTS强制浏览器访问https地址

之前想做全站https,但是发现CDN并不能支持自定义的https二级域名(https://static.zivers.com)地址,故弃之重拾http。但是,在切回非https访问的时候,已经有部分https页面被搜索引擎索引。因此需要将之前的https访问地址用301的方式跳转回非http对应URL。涉及到的更改主要在nginx的Server配置中。

于是参考WordPress官方的Nginx配置文档:Nginx做了443端口的301跳转。但是在配置完成后,我发现我的网站完全无法访问。具体表现是,我访问https地址是,网页无法显示,并报错。访问非https地址时,网站跳转到https地址,同样报错。而我并没有做80端口到443端口的跳转,相反,我的目的是将443端口的访问301重定向至80端口。于是我开始寻找原因:

首先,我发现了,在Nginx的https方式的Server配置文件中,有下面这样一句:

大意是开启HSTS,看起来像是对传输协议的操作。于是,我搜索了一下HSTS的相关信息,发现这是一个新的协议内容

HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

服务器开启 HSTS 的方法是,当客户端通过 HTTPS 发出请求时,在服务器返回的 HTTP 响应头中包含 Strict-Transport-Security 字段。浏览器接收到这样的信息之后,在一定期限内对该网站的任何请求都会以 HTTPS 发起,而不会以 HTTP 发起并由服务器重定向到 HTTPS。

具体信息可以参考这篇文章。显然,启用这个协议后我的所有http请求都被浏览器自动解析到https地址了。而且max-age长达一年,也就是说,一但生效,一年内所有http访问都将被自动解析到https地址。

为了防止悲剧发生,我赶紧去chrome的设置页面删除自己的请求提交。就是下面这个页面

20160203130535

在Delete domain中提交自己的网站。这只能算补救措施,如果发现的时候自己的网站已经在list中,那可能需要几个月时间才能删除。

经过以上步骤,http自动跳转就被取消了。网站恢复正常访问,但是https地址访问报错依旧没有解决。

通过curl命令访问得到以上报错信息。查询后发现是因为我所用的CDN并不支持https访问导致的。暂时也没有好的解决方案。索性放弃。

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注