首页 > Java > 是的,我也开启了全站HTTPS

是的,我也开启了全站HTTPS

现在的趋势都在全站HTTPS,据说在Google内部有一个时间表,会把所有未开启HTTPS的网站标注为不安全(目前仅仅会把带密码框的输入页标注为不安全),所以一直想玩玩,去年的时候就看到新浪timyang的博客开启了全站HTTPS,并写了一篇文章如何开启,当时就想玩玩,但感觉还是稍有麻烦,而且当时的博客服务器用的Apache,对Apache配置不熟,想着是自己的小博客就没动,前几天突然看到coolshell网也开启了全站HTTPS,发现现在配置变得很简单了,而且我的博客服务器也由Apache换成了Nginx,所以就玩了玩,确实很方便。
首先声明,无论是timyang还是左耳朵耗子,使用的都是Let’s Encrypt,他是一个公益组织,表示感谢,网址:https://letsencrypt.org/
下面写一下开启的方法:

1. 首先,打开 https://certbot.eff.org 网页。
2. 在那个机器上图标下面,你需要选择一下你用的 Web 接入软件 和你的 操作系统。比如,我选的,nginx 和 CentOS 6。
3. 然后就会跳转到一个安装教程网页。你就照着做一遍就好了。

例如我选的这个调到安装教程页,出现的命令是:


wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto

然后,运行如下命令:


./path/to/certbot-auto --nginx

certbot-auto 会自动检查到你的 nginx.conf 下的配置,把你所有的虚拟站点都列出来,然后让你选择需要开启 https 的站点。你就简单的输入列表编号(用空格分开),因为我的就一个所以直接回车就好了(里面有一些需要你填写的东西,连我这英文巨差的人都可以看懂,相信大家都能看的懂),然后,certbot-auto 就帮你下载证书并更新 nginx.conf 了。

但在这个过程中需要注意的一点:记得开启你的 443 端口,我博客用的阿里云,当时没开启直接报错了,开启之后重新执行一下这个命令就好了。

你打开你的 nginx.conf 文件 ,你可以发现你的文件中的 server 配置中可能被做了如下的修改:


    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.bridgeli.cn/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.bridgeli.cn/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot


    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    } # managed by Certbot

另外开启HTTPS之后都建议开启HTTP/2性能更好,但这要求你的Nginx版本要大于 1.9.5 ,开启的方法也无比简单,只需要在 nginx.conf 的 listen 443 ssl; 后面加上 http2 就好了。如下所示:


    listen 443 ssl http2; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.bridgeli.cn/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.bridgeli.cn/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

然后重启Nginx。


service nginx restart

到目前为止你已经成功的开启了全站HTTPS,但到目前还不算完,因为Let’s Encrypt 的证书90天就过期了,所以要每隔一段时间强制更新一下,每隔一段时间就是定时任务了,非 crontab 莫属,使用 crontab -e 命令加入如下的定时作业:


0 0 1 * * ./path/to/certbot-auto renew --force-renewal
5 0 1 * * /usr/sbin/service nginx restart

刚好我还学习了一下 crontab ,之前从没用过,crontab 中有六个字段,其含义如下:

第1个字段:分钟 (0-59)
第2个字段:小时 (0-23)
第3个字段:日期 (1-31)
第4个字段:月份 (1-12 [12 代表 December])
第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
/path/to/command – 计划执行的脚本或命令的名称

已经开启了全站HTTPS,证书过期的问题也已经解决了,是不是就完事了呢?还真不是:启用HTTPS后,你的网页中的所有的使用 http:// 的方式的地方都要改成 https:// 不然你的图片,js,css等非https的连接都会导致浏览器抱怨不安全而被block掉。所以,你还需要修改你的网页中那些 hard code http:// 的地方。因为我的博客是 WordPress 搭建的,所以要做如下修改:

1. 首先是 wordpress的 常规设置中的 “WordPress 地址” 和 “站点地址” 修改为 https 的方式
2. 然后是文章内的图片等资源的链接需要变更为 https 的方式。对此,有一个叫 “Search Regex” 插件可以批量更新历史文章里的图片或别的资源的链接。比如:把 http://bridgeli.cn 修改为 https://bridgeli.cn 和 http://www.bridgeli.cn 修改为 https://www.bridgeli.cn

至此终于大功告成了,还是很简单的吧,但是如果你浏览我博客,发现浏览器并没有标注为安全,因为还存在一个小问题:

1. 我博客有几篇文章中图片使用的是七牛云的图床,七牛云虽然开启了 HTTPS 但是他的证书有问题,不被识别,所以用的还是 HTTP 所以被标记为了不安全,解决这个问题之后,网站就会被标记为安全了,我因为不想修改那几个图片地址了,所以暂时不管,只要浏览不加载那几个图片的页面都会被标记成了安全

另外还有一个问题,浏览文章详情页浏览器中还有一个:此网页正试图从未经验证的来源加载脚本,这是因为用了 JiaThis 分享,JiaThis 目前不支持 HTTPS,被浏览器抱怨不安全而被block掉了,解决的方法嘛,要么换成 HTTPS,要么直接把这个分享给干掉。

参考资料:左耳朵耗子大神的coolshell网,我也是因为这篇文章而开启的全站HTTPS,https://coolshell.cn/articles/18094.html

分类: Java 标签: , ,
  1. 本文目前尚无任何评论.

请输入正确的验证码