申请 Let’s Encrypt 颁发的 SSL 证书,可以使用一个叫 Certbot 的命令行工具。Certbot 为不同的平台,提供了各自的安装方法。我的云服务器的操作系统是 CentOS 8,我需要的是 Nginx 的 SSL 证书,在 Certbot 官方的网站,可以筛选出适用于 CentOS 8 + Nginx 的生成 Let’s Encrypt 颁发的 SSL 证书的方法。
现在 CentOS 8 这种系统上,推荐安装一个叫 certbot-auto 的工具,然后用它去申请 Let’s Encrypt 的 SSL 证书。不过我发现安装 certbot-auto 这个工具依赖的一些包的时候,速度会非常慢,你可以先自己试一下,如果没问题,你可以直接使用这个工具申请证书。如果速度很慢,我们下面就一块儿用 Docker 的 Certbot 镜像提供的功能去申请证书。
在用 Docker 的 Cerbot 镜像申请证书的时候,它会创建一个临时的 Web 服务器,如果我们给它设置的端口是 80 的话,就会跟服务器上运行的 Nginx 有冲突,所以暂时可以先把 Nginx 停掉,执行一下 sudo systemctl stop nginx。
用我们之前在服务器安装运行的 Docker,基于 certbot/certbot 这个镜像创建一个容器,容器的功能就是执行一个 certonly 命令申请 SSL 证书。
执行 sudo docker run 加上 it 这两个选项,再加上一个 --rm 选项,这样容器停止以后会自动删除掉这个容器。在 --name 选项的后面设置一下容器的名字,可以是 certbot。
然后要设置一下数据卷,本地服务器的位置是 /etc/letsencrypt,对应的是容器里的 /etc/letsencrypt 目录。签发的证书文件可以在这个目录里找到。,再用一个 -v 设置一个数据卷,本地是 /var/lib/letsencrypt 容器的位置是在 /var/lib/letsencrypt 。
再用一个 -p 选项设置一个公开的端口,本地主机上是 80 端口,对应的是容器里的 80 端口。 这个容器是基于 certbot/certbot 这个镜像创建的,执行一下容器里的 certonly 这个命令,这个命令可以签发 ssl 证书。
选择验证的方法,可以选择 1,就是 standalone 这种方式,它会创建一个 web 服务器。第一次运行应该还会提示你设置一个邮件地址,是否同意许可协议,还会问我们愿不愿意分享邮件。
然后要输入要申请 ssl 证书的域名,我这里就是 xb2-node-api.ninghao.net 。 注意这个域名要提前设置好,指向服务器的 ip 地址。
一切正常就会看到 Congratulations! 这个提示,在 /etc/letsencrypt/live 这个目录的下面,会有一个跟申请证书的域名同名的目录,申请的证书文件可以在这个目录里找到。
配置 Nginx 需要的是 fullchain.pem 与 privkey.pem 这两个文件。申请的证书只有三个月的有效期,也就是你需要在证书到期之前重新申请,或者用 renew 命令更新证书。