如何在 Almalinux 上为 Nginx 安装TLS/SSL证书并开启自动续订
Let’s Encrypt 是一家证书颁发机构 (CA),它提供了一种获取和安装免费 TLS/SSL 证书的简便方法,从而在 Web 服务器上启用加密 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动执行大多数(如果不是全部)所需步骤。目前,在 Apache 和 Nginx 上,获取和安装证书的整个过程都是完全自动化的。
在本教程中,我们将使用 Certbot 为 Almalinux 9 上的 Nginx 获取免费的 SSL 证书,并将证书设置为自动更新。
1. 先决条件
要遵循本教程,您需要:
一台安装了 Almalinux 9 的服务器或者虚拟机,包括启用 sudo 的非 root 用户。如果您还未获取该条件,可以参考以下文章安装一台运行 Almalinux 的设备Almalinux 安装与使用
注册域名。您可以从 Namesilo.com 购买域名,使用 Freenom 免费获取域名,或使用您选择的域名注册商。
为您的服务器设置以下两个 DNS 记录, 通篇以域名 example.com 为例。
一条 A 记录可以将 example.com 解析为您服务器的公网 IP 地址。
一条 A 记录可以将 www.example.com
解析为您服务器的公网 IP 地址。
2. 安装 Certbot
使用 Let’s Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。
使用 dnf 安装 Certbot 及其 Nginx 插件:
1 |
|
Certbot 现在可以使用了,但为了使它能够自动为 Nginx 配置 SSL,我们需要验证一些 Nginx 的配置。
3. 确认 Nginx 的配置
Certbot 需要能够在 Nginx 配置中找到正确的 server 区块,才能自动配置 SSL。具体来说,它通过查找 nginx 配置中 server_name 指令,找到与需要申请证书的域来确定 server 区块。
如果您按照 Nginx 安装教程中的服务器块设置步骤进行操作,那么您应该已经为您的域名配置了一个 server 区块,并且已经正确设置了 server_name 指令。
要检查,请使用您喜欢的文本编辑器打开您的域的配置文件,
找到现有的 server_name 行。它应该如下所示:
/etc/nginx/sites-available/example.com
1 | server_name example.com www.example.com; |
如果是,请退出编辑器并继续下一步。
Certbot 现在可以找到正确的 server 块并自动更新它。
接下来,让我们更新防火墙以允许 HTTPS 流量。
4. 允许 HTTPS 通过防火墙
1 | sudo firewall-cmd --list-all |
确保 80 端口和 443 端口正常开启。
接下来,让我们运行 Certbot 并获取我们的证书。
5. 获取 SSL 证书 并配置 Nginx
Certbot 提供了多种通过插件获取 SSL 证书的方法。Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。要使用此插件,请输入以下内容:
1 |
|
certbot 将于与 nginx 插件一起运行,为由选项-d
指定的域名获取有效的证书。
如果是首次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。完成后,certbot 将与 Let’s Encrypt 服务器通信,然后运行质询以验证您是否对您申请证书的域有控制权。
如果成功,certbot 将会询问您如何配置 HTTPS 设置。
1 |
|
选择您的选择然后点击 ENTER。配置将被更新,并且 Nginx 将重新加载以获取新设置。certbot 将出现一条消息,告知您该过程已成功以及您的证书存储在哪里:
1 |
|
您的证书已下载、安装并加载。在浏览器中重新加载您的网站,并注意浏览器的安全指示器。它应该通常带有锁定图标表明该网站已得到妥善保护。
如果您使用SSL Labs 服务器测试该网站, 应该能够获得 A 级。
如果安装证书过程中有错误,可以修复错误后再运行如下命令,进行配置, 直到成功。
1 | certbot install --cert-name example.com |
6. 验证 Certbot 自动续订
Let’s Encrypt 的证书有效期仅为 90 天。这是为了鼓励用户自动执行证书续订流程。certbot 我们安装的软件包通过添加 systemd 计时器 来帮我们处理这个问题,该计时器每天运行两次,并自动续订任何在 30 天内到期的证书。
您可以使用以下命令查询计时器的状态 systemctl:
1 |
|
要测试更新过程,您可以进行如下试运行 certbot:
1 |
|
如果您没有看到任何错误,则一切就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。如果自动更新过程失败,Let’s Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将过期时提醒您。
7. 参考文档
如何在 Almalinux 上为 Nginx 安装TLS/SSL证书并开启自动续订
https://pengtech.net/network/secure_nginx_with_let_s_encrypt_on_almalinux.html