将博客应用从 HTTP 协议免费升级到 HTTPS
HTTPS 解决方案
由于微信小程序要求后端 API 接口的合法域名必须是 HTTPS 协议,所以我们需要将之前上线的博客应用域名升级为 HTTPS 协议,要实现应用的 HTTPS 化,需要在服务器上安装 SSL 证书,理论上我们自己也可以颁发 SSL 证书,但是自己颁发的证书浏览器不认可,需要权威结构认证的才行。常见的 SSL 证书由国际顶级 CA 机构授权颁发,比如下面这几个:
虽然安全稳定有保障,但是它们都是收费的,而且价格不菲,对于小微企业或者个人开发者来说,难以承受,所以今天学院君要给大家介绍的是一个免费的解决方案 —— Let's Encrypt。
Let's Encrypt 是一个于 2015 年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接(HTTPS)无所不在,为安全网站提供免费的 SSL/TLS 证书。
Let's Encrypt 由互联网安全研究小组(缩写ISRG)提供服务,主要赞助商包括电子前哨基金会、Mozilla 基金会、Akamai 以及思科,所以安全可靠性上没什么问题。
综上,Let's Encrypt 是一个免费、简单、自动化、安全可靠的 HTTPS 解决方案。下面我们来介绍如何在服务器安装 SSL 证书,并且在博客应用访问上生效。
安装 SSL 证书
为网站安装证书很简单,我们以上线 Laravel 博客应用的那台阿里云服务器作为演示环境,该环境使用的 Web 服务器是 Nginx,操作系统版本是 Ubuntu 18.04,我们将使用 Let's Encrypt 的客户端 Certbot 来自动化获取、部署和更新安全证书。首先访问 https://certbot.eff.org/ 选择自己的软件环境:
这样,在下面的「automated」Tab 页中就可以看到对应系统的安装使用指南了。接下来我们按照这个指南,登录到自己的服务器上执行对应的安装脚本安装 Certbot 客户端:
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-nginx
安装过程中,该直接回车回车,该选Yes输入Y回车。安装完成后,执行如下命令:
sudo certbot --nginx
执行这个命令时,Certbot 会先让你输入邮箱和同意协议,同意之后会自动检测 nginx.conf
下面的配置,把所有站点配置都列出来并让你选择哪个域名开启 HTTPS(输入列表编号,多个用空格分开):
输入编号后回车,我这里只有一个域名,输入1
回车,Certbot 就会为你下载证书并更新对应的站点配置信息了。然后,还会让你选择是否在通过 HTTP 协议访问应用时强制重定向到 HTTPS,1
表示不重定向,2
表示重定向,我选择了重定向:
这个时候再次打开 /etc/nginx/sites-available/laravel-blog
站点配置,就可以看到 Certbot 为我们添加的额外配置信息了:
运行 service nginx reload
重启 Nginx,就可以通过 https://blog.laravelacademy.org
访问博客应用了:
是不是很简单?全程都是 Certbot 自动帮我们完成的。这样,我们就完成了将博客应用从 HTTP 协议升级到 HTTPS。
友情提示:启用 HTTPS 后,应用中之前配置或者写死域名的地方都要改成 HTTPS 协议。
自动更新证书
由于 Let's Encrypt 默认的有效期是 90 天,所以如果你的应用需要在生产环境长期提供服务,还要在证书到期之后更新证书,我们可以通过 certbot renew
命令来更新证书,你可以通过如下命令来测试该命令是否生效:
sudo certbot renew --dry-run
如果在输出中看到如下字样,则表示生效:
当然,真实环境中通过手动维护是不现实的,我们可以借助 Crontab 来编写一个定时任务,每个月都强制更新一个这个证书,然后重启 Nginx:
0 0 1 * * certbot renew
5 0 1 * * service nginx restart
学院君注:Crontab 通过
crontab -e
命令编辑,通过crontab -l
查看。
这样,就完成了 SSL 安全证书无人值守式更新了。
2 Comments
可以使用 symantec 生成一年的免费的,不用平凡更新,我阿里的就是这个
我的一年到期了,不知道怎么可以继续免费用?