欢迎,来自IP地址为:216.73.216.144 的朋友
当 用户访问网站时,浏览器和网站服务器进行信息交互。如果不进行加密,那么会话就会以明文传送,这意味着信息传输环节中的任何人都可以获得全部内容:登录信息、用户隐私以及支付信息等。
使用 SSL 证书的 HTTPS 协议解决了这个问题,它会将浏览器和服务器间的交互信息进行加密。如果在浏览器的地址栏看到一个小小的挂锁标志,则表示浏览器和网站之间的连接是加密安全的。
长久以来,获取 SSL 证书意味着每年向证书颁发机构付费,并经历繁琐的手动设置过程。直到 Let’s Encrypt 的出现,才彻底改变了这一切。它是一个免费的自动化证书颁发机构,其存在的唯一目的就是:让加密连接成为整个网络的默认设置。
但是现在有一件比较麻烦的事:虽然 Let’s Encrypt 的证书是免费的,但证书有效期只有90天,手动更新证书对于系统管理人员来说简直像一场噩梦。直到 certbot 工具的出现,才彻底解决了这个问题。通过 certbot 这个命令行工具,可以完成证书管理全过程,包括获取、安装以及更新 Let’s Encrypt 证书。
在本教程中,我们将了解使用 certbot 的所有必要知识,从首次安装证书到了解续订流程,所有内容都将以易于理解的方式进行解释,即使对于 Linux 服务器的新手也能轻松掌握。
Linux 系统安装 certbot
certbot 的安装过程依据所使用的 Linux 发行版略有不同,但总体来说相当简单。
对于基于 Debian 的 Linux 发行版,则需要首先更新软件库,并根据所使用的 Web 服务器软件来选择安装:
# apt update # apt upgrade # apt install certbot python3-certbot-nginx //使用 Nginx # apt install certbot python3-certbot-apache //使用 Apache
对于基于 RHEL 的发行版,步骤也比较类似,只不过使用 dnf 命令进行软件包管理:
# dnf update # dnf install certbot python3-certbot-nginx //使用 Nginx # dnf install certbot python3-certbot-apache //使用 Apache
安装的 Web 服务器插件(也就是 python3-certbot-nginx 以及 python3-certbot-apache)十分重要,因为它可以让 certbot 自动为 web 服务器配置 HTTPS。如果没有它,那么我们只能手动配置各个网站的配置文件,这显然也是一项令人生畏的工作。certbot 出的的主旨就是要消除那些繁琐的工作。
获得 SSL 证书
certbot 工具安装完成后,获得 ssl 证书就变得非常简单了。
对于 Nginx 服务器,则使用如下命令:
# certbot --nginx -d example.com -d www.example.com
对于 Apache 服务器,命令也十分类似:
# certbot --apache -d example.com -d www.example.com
首次运行上述命令时,Certbot 会要求提供电子邮件地址。需要注意的是,虽然 Let’s Encrypt 过去会通过此邮箱发送证书到期通知,但为了最大限度地减少数据保留,他们已经停止了这项服务。因此,我们必须依赖可靠的自动续订流程,或者自行设置第三方监控服务来接收到期提醒。
之后,Certbot 会开始执行其工作:它会与 Let’s Encrypt 通信,验证对申请证书域名的控制权,获取证书,并修改 Nginx 配置以使用 HTTPS。
SSL 证书更新介绍
正如之前提到过的,Let’s Encrypt 的证书每 90 过期,所以需要一个从根本上自动进行证书更新过程。一个 systemd 的定时器会第天两次自动检查证书的到期时间,如果证书的有效期低于 30 天,那么 certbot 可以自动更新证书而不需要任何手动操作。
我们可以使用如下命令进行证书虚拟更新(这会模拟证书更新过程而不真的更新证书),以检验更新是否可以正常进行:
# certbot renew --dry-run
‘–dry-run’选项会模拟续订过程,这有助于确保所有配置正确无误。如果命令执行成功,则说明自动续订功能将在到期时正常工作。
要查看证书的到期时间和续订状态:
# certbot certificates

我们还可能使用如下命令来查看 certbot 定时器的工作状态:
# systemctl status certbot.timer

管理多个 SSL 证书
随着域名或子域名的增加,我们可能积累多个证书,但 certbot 让管理这些证书变得异常轻松。
要将新域名添加到现有证书:
# certbot --nginx -d example.com -d www.example.com -d blog.example.com
如果您想为不同的域名获取完全独立的证书:
# certbot --nginx -d another-domain.com -d www.another-domain.com
每个证书都是独立管理的,但所有续期都通过相同的续期流程自动进行。
手动更新 SSL 证书
certbot 的主要功能是自动续期,但有时可能需要手动强制续期。例如,我们可能进行了配置更改并希望进行测试,或者正在排查问题。
要续期所有即将到期的证书,则运行以下命令。该命令只会续期剩余 30 天内的证书,超过 30 天的证书将不会被续期:
# certbot renew
无论是否剩余保留天数,强制更新证书,则使用如下命令:
# certbot renew --force-renewal
查看证书信息
有时,我们需要查看已安装证书的详细信息,例如每个证书的名称、涵盖的域名、到期日期以及证书和私钥的存储文件路径。
实际的证书文件位于’/etc/letsencrypt/live/’目录下,每个证书对应一个单独的目录。在这些目录中,会有指向实际证书的符号链接,而这些证书的版本信息则存储在归档目录中。
撤销 SSL 证书
如果证书的私钥泄露,或者不再需要该证书,则应将其撤销。撤销证书会立即通知浏览器和其他客户端该证书不再受信任,即使它尚未过期。
要撤销证书:
# certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
我们需要指定要撤销的证书文件的路径。
# certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --delete-after-revoke
以上命令会让 certbot 与 Let’s Encrypt 通信以撤销证书,并清理本地文件。
不撤销仅删除证书
有时可能需要从系统中移除证书,但又不希望撤销它。例如,我们可能已将域名迁移到另一台服务器,或者意外获得了证书但从未使用它。
# certbot delete --cert-name example.com
此操作会从系统中移除证书文件,但不会撤销 Let’s Encrypt 颁发的证书。如果该证书在其他地方使用,则仍然有效,但 certbot 将停止在此服务器上管理该证书。
处理 certbot 证书续订问题
即使使用 certbot 的自动化功能,也可能偶尔遇到问题。
如果证书续订失败,首先检查我们的 Web 服务器是否正在运行且可从互联网访问,因为 Let’s Encrypt 需要通过 80 或 443 端口访问服务器以验证域名所有权。
我们可以查看更新日志以获取具体的错误信息:
# cat /var/log/letsencrypt/letsencrypt.log
这些日志会详细显示 certbot 的尝试以及失败之处,通常可以直接指出问题所在。
如果是 Web 服务器配置出现问题,certbot 有时可以恢复原始配置:
# certbot --nginx rollback
进阶使用
一旦熟悉了基本的证书管理,certbot 还提供了一些值得探索的高级选项。我们可以使用 DNS 验证代替 HTTP 验证,这样即使服务器无法通过 80 或 443 端口公开访问,也能获取证书。
我们还可以配置自定义续订脚本,以便在证书续订时运行它们,这对于重启服务或更新配置非常有用。我们甚至还可以获取覆盖所有子域名的通配符证书。
但对于大多数使用场景,我们介绍的简单命令就能满足基本需求。certbot 将曾经复杂且容易出错的流程简化为几个简单易用的命令。
