使用 certbot 快速获取 Let’s Encrypt 证书,提升网站安全性插图

在提高网站安全性方面,申请可信的 HTTPS 证书是必不可少的。以前一直认为只有静态内容的网站才需要使用 HTTPS,而且觉得申请证书很麻烦。最近我尝试了一下发现,使用命令行工具 certbot 可以非常方便地获取免费的 Let’s Encrypt 证书

使用 certbot 快速获取 Let’s Encrypt 证书,提升网站安全性插图1

Certbot 简介

Certbot 是一个 ACME 客户端,其本质上是 Let’s Encrypt 官方推荐的证书签发方式之一。它适用于拥有 shell 访问权限的域名,并使用 ACME 协议来自动化证书签发过程,大大简化了证书签发的步骤。

准备工作

申请 HTTPS 证书的前提是需要先申请一个域名,比如 example.me。同时还需要一台公网可访问的 VPS,并将 example.me 解析到该 VPS 的 IP 地址。

一键运行

可以从 GitHub 上安装 certbot,但文档中也给出了使用 Docker 直接启动的方法,这种方法非常方便。

sudo docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -p 80:80 certbot/certbot certonly

其中,certonly 是获取证书的命令,映射 80 端口是为了让 ACME 服务器能够访问我们的 VPS,以验证对域名的所有权。

填写信息

如果在运行 certonly 命令时不加任何参数,将会进入交互式界面。接下来我们需要做以下几步:

选择认证方式

根据提示选择适合自己的认证方式:

  • 选项 1:Certbot 自身运行一个 HTTP 服务器,并在 /.well-known/acme-challenge/ 路径下提供必要的验证文件。适用于没有运行 HTTP 服务器的情况。
  • 选项 2:将必要的验证文件保存到指定的 webroot 路径下的 .well-known/acme-challenge/ 目录中。此时必须有一个独立的 HTTP 服务器从该 webroot 路径提供文件。适用于已经有运行的 HTTP 服务器的情况。

填写邮件信息和同意服务协议

接下来需要填写邮箱地址和同意服务协议。

输入域名

然后需要输入需要签发证书的域名,可以使用逗号或空格分隔多个域名,但不能使用通配符 *。Certbot 会在本地启动一个 HTTP 服务器,并通知 ACME 服务器访问我们的域名网站,以验证域名所有权。

完成签发

签发证书的过程结束后,会在主机的 /etc/letsencrypt/live/example.me/ 目录下生成 fullchain.pemprivkey.pem 两个文件。我们可以将这些文件配置到自己的 web 服务器中,实现 SSL 证书配置。

更新证书

使用上述方式生成的证书有效期为 90 天。在证书过期之前,我们需要定期更新。只需将上述命令中的 certonly 改为 renew 即可。该命令会自动更新位于 /etc/letsencrypt/live/ 目录下有效期少于 30 天的证书