终于把几个重要网站HTTPS化

请输入图片描述

这段时间一直有空没空的在折腾HTTPS的事情。本来之前就已经报出来,Chrome把那些没有使用HTTPS的网站标记为不安全的事情。虽然感觉现在这样做可能有点早,但是毕竟HTTP和HTTPS还是有很大的不同的。

实际上HTTPS的部署门槛并不是很高,就是有点麻烦,有时得修改网站的代码,来适配HTTPS的加载。在操作的时候实际上还是遇到了很多问题的。在这里也感谢我的小伙伴 @酱油 @玉米叶子 的帮助,让我们相关网站能够成功的使用HTTPS。

说到HTTPS就得提到SSL证书。商业证书我们免费的个人网站肯定是用不起的,当然某些土豪除外。本来国内想使用免费的SSL证书是一件非常容易的事情。因为你只需要在wosign申请免费的SSL证书即可,并且时间长达一年。如果是使用了360网站卫士的话,也是可以直接一键开启HTTPS半程加密的。但是很蛋疼的事情出现了,由于360子公司wosign出现了违规颁发证书的事情,导致被多个浏览器惩罚,最后免费的SSL证书也不再提供。也因为如此,360网站卫士一度停止了免费证书的一键获取功能,在我从360离职之前,也依然未能恢复该功能。

这样的话获取一个可以长期使用的SSL证书又成了一个问题。还好,阿里云和腾讯云目前是支持免费SSL证书的签发的,用的是赛门铁克的证书。我这边就试着申请了一下。实际上获取免费证书的方式有很多,这里我就不详细说了。

HTTPS是存在兼容性的问题的,目前主要很多使用的是SNI,SNI的话能够够解决共享IP的网站使用不同的证书的问题,但是与此同时,SNI也不是所有的平台、系统、浏览器都是支持的,特别是一些低版本的系统或者浏览器就是无法正常访问导致SSL不信任的。

HTTPS由于其安全性问题,页面上需要加载的资源如图片、视频、CSS、JS等都是需要用HTTPS的方式调取的,否则网站不仅会被禁止加载这些资源,并且浏览器的绿色HTTPS的锁头也会显示红色或者灰色的不安全字样。所以这时就得排查网站的代码是否包含了HTTP的协议,如果有,要么改成HTTPS,要么直接去掉协议头。去掉协议头的话就代表你当前如果是HTTPS的,就会用HTTPS调取相关资源。

后面就涉及HTTP的访客向HTTPS导流的问题。目前做法有两种,一种是使用301跳转操作。还有一种就是使用HSTS进行跳转。其中HSTS只有一些版本较高的浏览器支持,其响应头中包含Strict-Transport-Security字段,浏览器就能长期记住网站使用HTTPS访问,而不是单纯的301重定向,并且更加安全。缺点也是很明显的,下面是我翻译自cloudflare的一段说明。

HTTP Strict Transport Security (HSTS) can substantially improve the security of your website. However, there are important considerations to keep in mind when enabling HSTS:
HTTPS (SSL) must be enabled in order to use HSTS.
If you turn on HSTS and do not have HTTPS for your website, browsers will not accept the HSTS setting.
If you have HSTS enabled and leave Cloudflare, you need to continue to support HTTPS through a new service provider otherwise your site will become inaccessible to visitors until you support HTTPS again.
If you turn off Cloudflare’s HTTPS while HSTS is enabled, and you don't have a valid SSL certificate on your origin server, your website will become inaccessible to visitors.
Note: Disabling Cloudflare’s HTTP can be done in several ways: Grey clouding a subdomain in your DNS records, “Pausing” the Cloudflare service, or having a misconfigured custom SSL certificate through your Cloudflare dashboard (e.g., invalid SSL certificates, expired certificates, or mismatched host names).
If you need to disable HTTPS on your domain, you must first disable HSTS in your Cloudflare dashboard and wait for the max-age to lapse to guarantee that every browser is aware of this change before you can disable HTTPS. The average max-age is six months (you can set the max-age in the next step). If you remove HTTPS before disabling HSTS your website will become inaccessible to visitors for up to the max-age or until you support HTTPS again. Because disabling HTTPS on an HSTS enabled website can have these consequences, we strongly suggest that you have a committed HTTPS service in place before enabling this feature.

大意如下(机翻请不要在意)

HTTP严格的传输安全(HSTS)可以大大提高您的网站的安全性。但是,启用HSTS时需要注意一些重要的注意事项:
必须启用HTTPS(SSL)才能使用HSTS。
如果您打开HSTS并且没有HTTPS为您的网站,浏览器将不接受HSTS设置。
如果您启用了HSTS并离开Cloudflare,则需要通过新的服务提供商继续支持HTTPS,否则您的站点将无法访问,直到您再次支持HTTPS。
如果在启用HSTS的情况下关闭Cloudflare的HTTPS,并且您的原始服务器上没有有效的SSL证书,则访问者将无法访问您的网站。
注意:禁用Cloudflare的HTTP可以通过以下几种方式完成:在您的DNS记录中使某个子域灰蒙蒙上,“暂停”Cloudflare服务,或者通过您的Cloudflare控制面板配置错误的自定义SSL证书(例如,无效的SSL证书,过期的证书或不匹配的主机名称)。
如果您需要在您的域上禁用HTTPS,则必须先在您的Cloudflare仪表板中禁用HSTS,然后等待最大时限失效,以确保每个浏览器都能知道此更改,然后才能禁用HTTPS。平均最大年龄是六个月(您可以在下一步中设置最大年龄)。如果您在禁用HSTS之前删除HTTPS,则您的网站将无法访问到达最大年龄的访问者,或者直到您再次支持HTTPS。因为在启用HSTS的网站上禁用HTTPS会产生这些后果,所以我们强烈建议您在启用此功能之前已经提交了HTTPS服务。

一切设置完毕之后,就可以享受HTTPS带来的安全了。

目前夏空社和其他的相关附属网站,均使用不同的方法达到了HTTPS使用的效果,当然个别非重要网站并未使用HTTPS,毕竟还有一些其他的考虑在内。不过使用HTTPS后,能够很好的避免一些TCP劫持,防止某些黑产从中插入一些不该有的广告或者其他未授权内容。

期间我们网站群的安全运维酱油也是配合我进行了相关的测试,也因此度过了很多不眠之夜,在此非常感谢!

————————————————————————————————————
猫箱内の六轩岛原创文章,转载请保留出处:http://blog.ushiromiyabatora.com

Last modification:November 5th, 2017 at 08:57 pm
If you think my article is useful to you, please feel free to appreciate

6 comments

  1. 祥磊部落

    半年来一次,主题换一次.

    1. 猫箱内の巴托拉
      @祥磊部落

      我换的没这么频繁吧哈哈哈哈ヾ(≧∇≦*)ゝ

      1. Ytf4425
        @猫箱内の巴托拉

        以前好久没换的。。。那个红黑色的主题OωO

        1. 猫箱内の巴托拉
          @Ytf4425

          那个粘贴代码有点诡异

  2. Ytf4425

    我觉得 Let's encrypt 出现后 Google 的 https 强制推广行为来得正是时候,而且现在也有很多一键申请并部署Let's encrypt 的脚本了。。OωO

    1. 猫箱内の巴托拉
      @Ytf4425

      是啊,我另一个网站就是用的 Let's encrypt

Leave a Comment