介绍
Let's Encrypt 是一个证书授权机构(CA),它提供了一个可访问的方式来获取和安装免费的 TLS/SSL 证书,从而在 Web 服务器上允许加密 HTTPS。它通过提供一个软件客户端,Certbot,它试图自动化大多数(如果不是所有)所需的步骤来简化这个过程。
在本教程中,您将使用Certbot在Ubuntu 22.04上获得免费的NGINX SSL证书,并设置您的证书自动更新。
本教程将使用单独的 Nginx 服务器配置文件,而不是默认文件。 我们建议为每个域创建新的 Nginx 服务器封锁文件,因为它有助于避免常见的错误,并将默认文件作为回归配置。
前提条件
要遵循本教程,您将需要:
一个Ubuntu 22.04 服务器设置通过以下 初始服务器设置为 Ubuntu 22.04 教程,包括一个 sudo-enabled non-root用户和防火墙。
- 注册域名. 本教程将使用
example.com
整个。您可以从 Namecheap购买域名,获得一个免费的 Freenom,或使用您选择的域名注册器。 - 以下两个 DNS 记录为您的服务器设置。 如果您正在使用 DigitalOcean,请参阅我们的 DNS 文档 有关如何添加它们的详细信息。
- 一个记录与
example.com
指向您的
步骤1:安装Certbot
Certbot 建議使用其 snap 套件進行安裝. Snap 套件在幾乎所有 Linux 發行版上都工作,但他們要求您先安裝 snapd 以管理 snap 套件。
1sudo snap install core; sudo snap refresh core
如果您在之前安装了较旧版本的 certbot 的服务器上工作,您应该在继续之前移除它:
1sudo apt remove certbot
之后,您可以安装certbot
包:
1sudo snap install --classic certbot
最后,您可以将certbot
命令从即时安装目录链接到您的路径,因此您将能够通过键入certbot
来运行它。
1sudo ln -s /snap/bin/certbot /usr/bin/certbot
现在我们已经安装了Certbot,让我们运行它来获得我们的证书。
步骤 2 — 确认 Nginx 的配置
Certbot 需要能够在您的 Nginx 配置中找到正确的服务器
块,以便能够自动配置 SSL。
如果您遵循了 Nginx 安装教程中的 [服务器块设置步骤](https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-22-04#step-5-%E2%80%93-setting-up-server-blocks-(recommended),则您应该在 /etc/nginx/sites-available/example.com’ 对您的域名设有服务器块,并且已设置适当的
server_name` 指令。
要检查,请使用nano
或您最喜欢的文本编辑器打开您的域的配置文件:
1sudo nano /etc/nginx/sites-available/example.com
查找现有的server_name
行,它应该是这样的:
1[label /etc/nginx/sites-available/example.com]
2...
3server_name example.com www.example.com;
4...
如果是,请退出编辑器并转到下一步。
如果不是,则更新以匹配,然后保存文件,离开编辑器,并验证配置编辑的语法:
1sudo nginx -t
如果您收到错误,请重新打开服务器封锁文件并检查任何字符或缺少的字符。一旦配置文件的语法是正确的,重新加载 Nginx 来加载新的配置:
1sudo systemctl reload nginx
Certbot 现在可以找到正确的服务器
块,并自动更新。
接下来,让我们更新防火墙以允许HTTPS流量。
步骤 3 – 通过防火墙允许 HTTPS
如果您已启用ufw
防火墙,根据前提指南的建议,您将需要调整设置以允许HTTPS流量。
您可以通过键入查看当前设置:
1sudo ufw status
它可能看起来像这样,这意味着只有HTTP流量被允许到Web服务器:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7Nginx HTTP ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9Nginx HTTP (v6) ALLOW Anywhere (v6)
要进一步允许 HTTPS 流量,请允许 Nginx 完整配置文件并删除多余的 Nginx HTTP 配置文件允许:
1sudo ufw allow 'Nginx Full'
2sudo ufw delete allow 'Nginx HTTP'
你的状态现在应该是这样的:
1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
7Nginx Full ALLOW Anywhere
8OpenSSH (v6) ALLOW Anywhere (v6)
9Nginx Full (v6) ALLOW Anywhere (v6)
接下来,让我们运行Certbot并获取我们的证书。
第4步:获取SSL证书
Certbot 提供了通过插件获取 SSL 证书的多种方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。
1sudo certbot --nginx -d example.com -d www.example.com
这将运行certbot
与--nginx
插件,使用-d
来指定我们希望证书有效的域名。
在运行命令时,您将被要求输入电子邮件地址并同意服务条款. 这样做后,您应该看到一个消息,告诉您过程成功,您的证书存储在哪里:
1[secondary_label Output]
2IMPORTANT NOTES:
3Successfully received certificate.
4Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem
5Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem
6This certificate expires on 2022-06-01.
7These files will be updated when the certificate renews.
8Certbot has set up a scheduled task to automatically renew this certificate in the background.
9
10- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
11If you like Certbot, please consider supporting our work by:
12* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
13* Donating to EFF: https://eff.org/donate-le
您的证书已下载、安装和加载,您的 Nginx 配置现在将自动重定向所有网页请求到 https://
. 尝试重新加载您的网站并注意您的浏览器的安全指标。 它应该表明该网站是正确保护的,通常用锁定图标。 如果您使用 SSL Labs Server Test测试您的服务器,它将获得 A级别。
让我们通过测试更新过程来结束。
步骤 5 – 验证 Certbot 自动更新
Let’s Encrypt 的证书仅有效 90 天,这是为了鼓励用户自动更新证书的过程,我们安装的certbot
包通过添加一个 systemd 计时器来为我们提供此功能,该计时器每天运行两次,并在到期三十天内自动更新任何证书。
您可以用systemctl
查询计时器的状态:
1sudo systemctl status snap.certbot.renew.service
1[secondary_label Output]
2○ snap.certbot.renew.service - Service for snap application certbot.renew
3 Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static)
4 Active: inactive (dead)
5TriggeredBy: ● snap.certbot.renew.timer
要测试更新过程,您可以使用certbot
进行干跑:
1sudo certbot renew --dry-run
如果你看不到任何错误,你都已经设置了。当需要时,Certbot会更新你的证书并重新加载 Nginx 来接收更改。如果自动更新过程有时失败,Let’s Encrypt 会向你指定的电子邮件发送消息,提醒你你的证书即将到期。
结论
在本教程中,您安装了 Let’s Encrypt 客户端certbot
,下载了您的域的 SSL 证书,配置了 Nginx 以使用这些证书,并设置了自动证书更新。