想使用 https 需要认证机构颁发的电子证书。本文介绍一个免费的 https 的证书 Let’s Encrypt。
Let’s Encrypt 和其他认证机构的区别:
- 免费,Let’s Encrypt 提供期限是90天的免费电子证书
- 提供工具 certbot 自动生成电子证书文件
Let’s Encrypt 证书不仅是免费的,而且支持通配符证书,通配符证书指的是一个可以被多个子域名使用的公钥证书,多个子域名使用起来十分方便。申请和配置的流程都非常简单,虽然每次的有效期为 90 天,但可以通过脚本去更新证书,只要配置好了,几乎可以一劳永逸。
本文使用的环境
- Ubuntu 20.04 LTS
- nginx 1.19.1
Certbot 官网:
选择 WEB 服务器版本,系统版本,然后按指引一步步执行脚本即可。
简单来说分为如下几步:
第一步:安装 certbot
安装 certbot 之前要保证服务器已安装了 snapd, 由于本文使用的为 ubuntu 20.04 版本,需先安装 snapd,执行以下命令:
1 | $ sudo apt update |
安装完成后测试是否安装成功:
1 | $ sudo snap install hello-world |
如果系统已经安装了 snapd,需更新 snapd 至最新版,执行以下命令
1 | $ sudo snap install core; sudo snap refresh core |
安装 certbot,执行以下命令
1 | $ sudo snap install --classic certbot |
准备 certbot 命令,执行以下命令,确保可以运行 certbot 命令:
1 | $ sudo ln -s /snap/bin/certbot /usr/bin/certbot |
第二步:生成证书,certbot 提供如下两种方式:
第一种 可自动编辑 nginx 配置
1 | $ sudo certbot --nginx |
第二种 仅获得证书,需手动修改 nginx 配置
1 | $ sudo certbot certonly --nginx |
因为服务器上使用的 nginx 为 docker 容器运行,本文使用的为第二种方式。
先确保服务器上已经正常运行了 nginx ,并且可以正常访问。
执行如下命令
1 | $ sudo certbot certonly --nginx |
证书生成成功将会输出如下内容
1 | MPORTANT NOTES: |
选了第二种方式后,需修改 nginx 的配置文件 新增 ssl 相关配置:
1 | server{ |
如果是 docker 容器运行的 nginx ,则需额外配置挂载卷:
1 | volumes: |
第三步:重启 nginx 使配置生效。
自动续订证书
系统上的 Certbot 软件包带有 cron 作业或 systemd 计时器,它们将在证书过期之前自动更新证书。除非更改配置,否则无需再次运行 Certbot。可以运行以下命令测试证书的自动续订
1 | sudo certbot renew --dry-run |
如果需要手动更新证书,则仅需再次执行 sudo certbot certonly --nginx
命令,按步骤操作即可。