@网络老鼠技术小屋

网络老鼠技术小屋-涂飞平的博客空间

个人博客HTTPS改造实践

4 月前 1

为什么突然想到将自己的个人博客改为HTTPS协议呢?原来的HTTP不是挺好的么?
上周末(9月8日),桃子同学来园区陪我们加班,下午我们开始一起处理一个之前他遇到的HTTPS配置问题,搞到晚上,终于搞好,虽然技术上收获不多,但自己也感觉到HTTPS确实是下一步自己必须需要重视的部分。
1、在我们产品和项目实施过程中,由于客户都是行政单位,《等保测评》越来越多的要求网络安全(哪怕是内网环境),测试的时候确实会采用网络嗅探方式,所以产品部署采用HTTPS协议势在必行;
2、谷歌Chrome和Firefox等现代浏览器也要求越来越严格,谷歌从Chrome 68浏览器开始,就把所有未采用HTTPS加密的网站都标记为“不安全”网站。

现在CA授权部门很多,但收费都比较高,个人用户的我肯定负担不起,在网络上找寻许久,终于找到了免费的CA认证:LET'S ENCRYPT™,这个机构是由互联网安全研究小组提供的服务,关键是,这个CA认证已经内置在目前主流的浏览器中(要为这个组织的开放怒赞一波)。
代理商给出的SSL各种版本报价,不便宜!
step5.png

下面就是将个人博客www.tufeiping.cn设置为https协议的step by step过程。

1、访问 https://certbot.eff.org
2、根据自己服务器的实际情况,选择服务器操作系统和Server软件
step1.png
我的个人博客部署在阿里云,采用的Ubuntu,服务部署在Nginx后端。
3、查看服务器的版本
step2.png
4、按照教程更新源,下载软件
step3.png
Ubuntu的软件安装一般套路:先update更新源,加入新的repository地址,再update更新,最后install软件
step4.png
5、启动certbot提供的交互脚本

certbot --nginx
step6.png
交互中会依次要求您输入:联系人的e-mail邮箱地址,是否同意一些条款(分别填入A或者Y即可)
6、选择需要采用HTTPS的网站
同意之后,脚本会根据之前选择nginx服务器类型,自动读取服务器上Nginx配置文件,然后列出其中支持的网站域名(就是server节中的servername内容),我们选择需要处理的域名,填入序号。
step7.png
我的服务器上配置很多域名(服务器很忙~_~)
这里我选择5 (www.tufeiping.cn)
7、设置http访问方式
certbot交互脚本会继续询问,指定域名网站http采用什么方式访问,这是什么意思呢?因为设置网站HTTPS访问,同时也可以支持HTTP访问,也可以将HTTP访问跳转到HTTPS访问中。
我这里选择redirec方式,这样,所有对我的网站http访问都会重定向到HTTPS访问中(也就是我的网站默认只支持HTTPS协议访问)
step8.png
这里其实脚本只是在nginx配置文件中加入了一个server节点,rewrite规则,将http重定向到HTTPS,如下
server {
listen 80;
server_name tufeiping.cn www.tufeiping.cn;
if ($host = www.tufeiping.cn) {
return 301 https://$host$request_uri;
} # managed by Certbot
return 404; # managed by Certbot
}
8、打开服务器443端口
由于阿里云默认没有打开443端口,所以还得登录阿里云控制台,将虚拟机的443端口打开
step9.png

9、测试
分别使用http://www.tufeiping.cn和https://www.tufeiping.cn访问个人博客,看到浏览器地址栏左侧出现绿色环保标志了!
step10.png

10、一些限制和应对办法
由于是免费的CA证书,所以其过期时间有点短,只有90天
step11.png
LET'S ENCRYPT™官方真是厚道(宗旨确实如其名),提供一个renew脚本,只要将这个脚本放在cron定时任务里,每隔一个月执行一次,自动完成续期就好了。
step12.png
注意:在renew之后,也需要将nginx reload一下,重新载入新的pem文件。

写在最后:
其实,写本文之前,我只是想用周末跟桃子一起实施的步骤,应用到个人网站上,通过openssl,一步一步生成crt,key,csr等文件,然后配置nginx,完成HTTPS全手工配置,但由于还是会出现"不是私密连接"(如同12306.cn网站一样)提示,心有不甘,才开始找免费的解决方案。
step13.png
(注:12306的CA证书是webssl.chinanetcenter.com授予的,可惜Chrome等浏览器不认这个CA机构颁发的证书,前段时间还吊销了CNNIC的证书,国家级的机构还不如一个非盈利组织,真是讽刺)。
由于我们部门产品基本上都是内网部署,不能访问外网,所以,只能使用openssl自己制作证书的方式部署HTTPS,好在使用者并没人在意到底是不是“私密”这个提示,只要安全即可。

本文其实更像是一个certbot.eff.org操作的中文说明,但通过读certbot的脚本,可以更加深入的理解openssl的基本步骤和nginx的相关配置。

评论

"个人博客HTTPS改造实践" 有 1 条评论

  • sunny 评论:
    4 月前

    certbot的源码是调用python脚本,核心代码在:
    /usr/lib/python3/dist-packages/pkg_resources/__init__.py
    里面

编写评论