如何在 Almalinux 上为 Nginx 安装TLS/SSL证书并开启自动续订

Let’s Encrypt 是一家证书颁发机构 (CA),它提供了一种获取和安装免费 TLS/SSL 证书的简便方法,从而在 Web 服务器上启用加密 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动执行大多数(如果不是全部)所需步骤。目前,在 Apache 和 Nginx 上,获取和安装证书的整个过程都是完全自动化的。

在本教程中,我们将使用 Certbot 为 Almalinux 9 上的 Nginx 获取免费的 SSL 证书,并将证书设置为自动更新。

1. 先决条件

要遵循本教程,您需要:

  1. 一台安装了 Almalinux 9 的服务器或者虚拟机,包括启用 sudo 的非 root 用户。如果您还未获取该条件,可以参考以下文章安装一台运行 Almalinux 的设备Almalinux 安装与使用

  2. 注册域名。您可以从 Namesilo.com 购买域名,使用 Freenom 免费获取域名,或使用您选择的域名注册商。

  3. 为您的服务器设置以下两个 DNS 记录, 通篇以域名 example.com 为例。

一条 A 记录可以将 example.com 解析为您服务器的公网 IP 地址。

一条 A 记录可以将 www.example.com 解析为您服务器的公网 IP 地址。

2. 安装 Certbot

使用 Let’s Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。

使用 dnf 安装 Certbot 及其 Nginx 插件:

1
2
3

sudo dnf install certbot python3-certbot-nginx

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
2
3

sudo certbot --nginx -d example.com -d www.example.com

certbot 将于与 nginx 插件一起运行,为由选项-d指定的域名获取有效的证书。

如果是首次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。完成后,certbot 将与 Let’s Encrypt 服务器通信,然后运行质询以验证您是否对您申请证书的域有控制权。

如果成功,certbot 将会询问您如何配置 HTTPS 设置。

1
2
3
4
5
6
7
8
9
10
11

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

选择您的选择然后点击 ENTER。配置将被更新,并且 Nginx 将重新加载以获取新设置。certbot 将出现一条消息,告知您该过程已成功以及您的证书存储在哪里:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Output
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-08-18. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

您的证书已下载、安装并加载。在浏览器中重新加载您的网站,并注意浏览器的安全指示器。它应该通常带有锁定图标表明该网站已得到妥善保护。

如果您使用SSL Labs 服务器测试该网站, 应该能够获得 A 级。

如果安装证书过程中有错误,可以修复错误后再运行如下命令,进行配置, 直到成功。

1
certbot install --cert-name example.com

6. 验证 Certbot 自动续订

Let’s Encrypt 的证书有效期仅为 90 天。这是为了鼓励用户自动执行证书续订流程。certbot 我们安装的软件包通过添加 systemd 计时器 来帮我们处理这个问题,该计时器每天运行两次,并自动续订任何在 30 天内到期的证书。

您可以使用以下命令查询计时器的状态 systemctl:

1
2
3
4
5
6
7
8
9

$ sudo systemctl status certbot.timer

Output
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago
Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left
Triggers: ● certbot.service

要测试更新过程,您可以进行如下试运行 certbot:

1
2
3

sudo certbot renew --dry-run

如果您没有看到任何错误,则一切就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。如果自动更新过程失败,Let’s Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将过期时提醒您。

7. 参考文档

How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04

如何在 Almalinux 上为 Nginx 安装TLS/SSL证书并开启自动续订

https://pengtech.net/network/secure_nginx_with_let_s_encrypt_on_almalinux.html

作者

鹏叔

发布于

2024-09-19

更新于

2024-09-19

许可协议

评论