将网站应用从 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 安全证书无人值守式更新了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。