Total Pageviews

Tuesday, 19 February 2013

修改 HSTS 设置,强制chrome使用 HTTPS

虽然通过修改 hosts 文件可以访问 Twitter、Google+ 等网站,但是不能直接访问,必须使用 HTTPS 链接。手动修改地址显然非常繁琐,而且每次访问都要修改,真是令人烦不胜烦。

其实 Chrome 浏览器已经支持 HSTS,使用这个协议可以实现全程加密,而且还可针对特定网站强制使用这个协议。那么,应该怎样使用它来解决这一问题呢?

    在 Chrome 中打开 chrome://net-internals/#hsts 这个网址。
    在 Domain 中输入需要强制使用 HTTPS 的域名。
    勾选 Include Subdomains,保证它的子域名也能被重定向。
    点击 Add 按钮即可完成。

注意:某些 Google 服务域名已被 Chrome 设定排除规则(也就是说设置无效),例如 google.com。
----------------

网站启用HSTS严格HTTPS

由于谷歌已经公开声明搜索引擎对https网站更加友好,排名更优先,所以越来越多的网站用上了https。https的一大好处就是安全,但是目前https并不足够普遍,用户也是懒得在域名前输入https://这样的内容,所以就需要网站设置301进行跳转,但是很有可能网站在跳转前被劫持,引向错误的网站,所以就需要设置HTST,这样可以让用户在第一次访问网站之后保留信息,第二次访问直接浏览器就自动跳转到https网站,避免了被中间人劫持。

一、Nginx的配置

nginx比较简单,vim /etc/nginx/sites-available/example.conf修改自己的配置文件,ssl下的server块中加入一行
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
保存退出,然后执行service nginx restart重启Nginx即可。63072000意味着这个头信息保留一年,不过这一年中如果有任何一次访问都会重新变成了1年的保留时间。

二、Apache2的配置

apache2的配置和nginx也差不多,到/etc/apache2/sites-available/example.conf 中寻找自己的配置文件,也是添加一行:
Header always set Strict-Transport-Security "max-age=15552000; includeSubdomains; preload"
保存退出即可,service apche2 restart重启apache;接着可以使用命令apache2 -t测试自己的配置是否生效。
如果出现了类似下列错误:
Invalid command ‘Header’, perhaps misspelled or defined by a module not included in the server configuration
不要慌张,是没有启用headers模块,执行下列命令后再测试一下,问题就能解决了。
a2enmod headers

三、测试设置是否成功

设置完成了,需要看看自己的设置是否成功,就可以用curl测试,注意这里的域名就需要加上https了。
curl -I https://mydomain.com -k
如果出来的结果中含有类似下列的字段,那么说明自己的设置成功了。
Strict-Transport-Security