如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>介绍
</li><li>
先决条件
<ul class="second_class_ul"><li>
<strong>步骤 1 - 安装 Certbot</strong>
</li><li>
步骤 2 — 确认 Nginx 的配置
</li><li>
步骤 3 — 允许 HTTPS 通过防火墙
</li><li>
步骤 4 - 获取 SSL 证书
</li><li>
步骤 5 - 验证 Certbot 自动续订
</li></ul></li><li>
结论
<ul class="second_class_ul"></ul></li></ul></div><p class="maodian"></p><h2>
介绍
</h2>
<p>
Let's Encrypt 是一个证书颁发机构 (CA),它提供了一种简单的方法来获取和安装免费的TLS/SSL 证书,从而在 Web 服务器上启用加密的 HTTPS。它通过提供软件客户端 Certbot 来简化流程,该客户端尝试自动执行大部分(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在 Apache 和 Nginx 上都是完全自动化的。
</p>
<p>
在本教程中,您将使用 Certbot 在 Ubuntu 20.04 上为 Nginx 获取免费的 SSL 证书,并将您的证书设置为自动续订。
</p>
<p>
本教程将使用单独的 Nginx 服务器配置文件而不是默认文件。我们建议为每个域创建新的 Nginx 服务器块文件,因为它有助于避免常见错误并维护默认文件作为后备配置。
</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx" alt="如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx" border="0" src="https://zhuji.jb51.net/uploads/img/202305/1dfc0b06dd45fc62ef09adb9b242e855.jpg"></p>
<p class="maodian"></p><h2>
先决条件
</h2>
<p>
要学习本教程,您需要:
</p>
<ul>
<li>
设置一个 Ubuntu 20.04 服务器,包括启用 sudo 的非root用户和防火墙。
</li>
<li>
一个注册的域名。本教程将example.com贯穿始终。
</li>
<li>
为您的服务器设置的以下两个 DNS 记录。
</li>
<li>
example.com指向您服务器的公共 IP 地址的 A 记录。
</li>
<li>
指向您服务器的公共 IP 地址的 A 记录。www.example.com
</li>
<li>
按照如何在 Ubuntu 20.04 上安装 Nginx 安装 Nginx。确保您的域有一个服务器块。本教程将用作示例。/etc/nginx/sites-available/example.com
</li>
</ul>
<p class="maodian"></p><h3>
<strong>步骤 1 - 安装 Certbot</strong>
</h3>
<p>
使用 Let's Encrypt 获取 SSL 证书的第一步是在您的服务器上安装 Certbot 软件。
</p>
<p>
安装 Certbot 和它的 Nginx 插件apt:
</p>
<ul>
<li>
sudo apt install certbot python3-certbot-nginx
</li>
</ul>
<p>
Certbot 现在可以使用了,但是为了让它自动为 Nginx 配置 SSL,我们需要验证 Nginx 的一些配置。
</p>
<p class="maodian"></p><h3>
步骤 2 — 确认 Nginx 的配置
</h3>
<p>
Certbot 需要能够server在您的 Nginx 配置中找到正确的块才能自动配置 SSL。具体来说,它通过查找server_name与您为其申请证书的域匹配的指令来实现这一点。
</p>
<p>
如果您按照Nginx 安装教程中的服务器块设置步骤进行操作,则您的域中应该有一个服务器块,并且已正确设置了指令。/etc/nginx/sites-available/example.comserver_name
</p>
<p>
要检查,请使用nano或您喜欢的文本编辑器打开您的域的配置文件:
</p>
<ul>
<li>
sudo nano /etc/nginx/sites-available/example.com
</li>
</ul>
<p>
找到现有的server_name行。它应该是这样的:
</p>
<p>
<strong>/etc/nginx/sites-available/example.com</strong>
</p>
<ol class="dp-xml">
<li class="alt">
<span><span>... </span></span><span></span>
</li>
<li class="alt">
<span>server_name example.com www.example.com; </span><span></span>
</li>
<li class="alt">
<span>... </span>
</li>
</ol>
<p>
如果是,请退出编辑器并继续下一步。
</p>
<p>
如果不是,请更新它以匹配。然后保存文件,退出编辑器,并验证配置编辑的语法:
</p>
<ul>
<li>
sudo nginx -t
</li>
</ul>
<p>
如果出现错误,请重新打开服务器块文件并检查是否有任何拼写错误或缺失字符。配置文件的语法正确后,重新加载 Nginx 以加载新配置:
</p>
<ul>
<li>
sudo systemctl reload nginx
</li>
</ul>
<p>
Certbot 现在可以找到正确的server块并自动更新它。
</p>
<p>
接下来,让我们更新防火墙以允许 HTTPS 流量。
</p>
<p class="maodian"></p><h3>
步骤 3 — 允许 HTTPS 通过防火墙
</h3>
<p>
如果您ufw按照先决条件指南的建议启用了防火墙,则需要调整设置以允许 HTTPS 流量。幸运的是,Nginxufw在安装时注册了一些配置文件。
</p>
<p>
您可以通过键入以下内容查看当前设置:
</p>
<ul>
<li>
sudo ufw status
</li>
</ul>
<p>
它可能看起来像这样,这意味着 Web 服务器只允许 HTTP 流量:
</p>
<ol class="dp-xml">
<li class="alt">
<span><span>Status: active </span></span><span></span>
</li>
<li class="alt">
<span>To Action From </span><span></span>
</li>
<li class="alt">
<span>-- ------ ---- </span><span></span>
</li>
<li class="alt">
<span>OpenSSH ALLOW Anywhere </span>
</li>
<li>
<span>Nginx HTTP ALLOW Anywhere </span>
</li>
<li>
<span>OpenSSH (v6) ALLOW Anywhere (v6) </span>
</li>
<li>
<span>Nginx HTTP (v6) ALLOW Anywhere (v6) </span>
</li>
</ol>
<p>
要额外允许 HTTPS 流量,请允许 Nginx 完整配置文件并删除冗余的 Nginx HTTP 配置文件限额:
</p>
<ul>
<li>
sudo ufw allow 'Nginx Full'
</li>
<li>
sudo ufw delete allow 'Nginx HTTP'
</li>
</ul>
<p>
您现在的状态应如下所示:
</p>
<ul>
<li>
sudo ufw status
</li>
</ul>
<ol class="dp-xml">
<li class="alt">
<span><span>Status: active </span></span><span></span>
</li>
<li class="alt">
<span>To Action From </span><span></span>
</li>
<li class="alt">
<span>-- ------ ---- </span><span></span>
</li>
<li class="alt">
<span>OpenSSH ALLOW Anywhere </span><span></span>
</li>
<li class="alt">
<span>Nginx Full ALLOW Anywhere </span><span></span>
</li>
<li class="alt">
<span>OpenSSH (v6) ALLOW Anywhere (v6) </span><span></span>
</li>
<li class="alt">
<span>Nginx Full (v6) ALLOW Anywhere (v6) </span>
</li>
</ol>
<p>
接下来,让我们运行 Certbot 并获取我们的证书。
</p>
<p class="maodian"></p><h3>
步骤 4 - 获取 SSL 证书
</h3>
<p>
Certbot 提供了多种通过插件获取 SSL 证书的方式。Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置。要使用此插件,请键入以下内容:
</p>
<ul>
<li>
sudo certbot --nginx -d example.com -d www.example.com
</li>
</ul>
<p>
这certbot与--nginx插件一起运行,-d用于指定我们希望证书有效的域名。
</p>
<p>
如果这是您第一次运行certbot,系统会提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot将与 Let's Encrypt 服务器通信,然后运行质询以验证您是否控制要为其申请证书的域。
</p>
<p>
如果成功,certbot将询问您希望如何配置 HTTPS 设置。
</p>
<ol class="dp-xml">
<li class="alt">
<span><span>Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. </span></span><span></span>
</li>
<li class="alt">
<span>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - </span><span></span>
</li>
<li class="alt">
<span>1: No redirect - Make no further changes to the webserver configuration. </span><span></span>
</li>
<li class="alt">
<span>2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for </span><span></span>
</li>
<li class="alt">
<span>new sites, or if you're confident your site works on HTTPS. You can undo this </span><span></span>
</li>
<li class="alt">
<span>change by editing your web server's configuration. </span><span></span>
</li>
<li class="alt">
<span>- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - </span><span></span>
</li>
<li class="alt">
<span>Select the appropriate number then (press 'c' to cancel): </span>
</li>
</ol>
<p>
选择您的选择,然后点击ENTER。配置将被更新,Nginx 将重新加载以获取新设置。certbot将以一条消息结束,告诉您该过程已成功以及您的证书的存储位置:
</p>
<ol class="dp-xml">
<li class="alt">
<span><span>IMPORTANT NOTES: </span></span><span></span>
</li>
<li class="alt">
<span>- Congratulations! Your certificate and chain have been saved at: </span><span></span>
</li>
<li class="alt">
<span>/etc/letsencrypt/live/example.com/fullchain.pem </span><span></span>
</li>
<li class="alt">
<span>Your key file has been saved at: </span><span></span>
</li>
<li class="alt">
<span>/etc/letsencrypt/live/example.com/privkey.pem </span><span></span>
</li>
<li class="alt">
<span>Your cert will expire on 2020-08-18. To obtain a new or tweaked </span><span></span>
</li>
<li class="alt">
<span>version of this certificate in the future, simply run certbot again </span><span></span>
</li>
<li class="alt">
<span>with the "certonly" option. To non-interactively renew *all* of </span><span></span>
</li>
<li class="alt">
<span>your certificates, run "certbot renew" </span><span></span>
</li>
<li class="alt">
<span>- If you like Certbot, please consider supporting our work by: </span><span></span>
</li>
<li class="alt">
<span>Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate </span><span></span>
</li>
<li class="alt">
<span>Donating to EFF: https://eff.org/donate-le </span>
</li>
</ol>
<p>
您的证书已下载、安装和加载。尝试使用重新加载您的网站https://并注意浏览器的安全指示器。它应该表明该站点已得到适当保护,通常带有锁定图标。如果您使用SSL Labs Server Test测试您的服务器,它将获得A级。
</p>
<p>
让我们通过测试更新过程来结束。
</p>
<p class="maodian"></p><h3>
步骤 5 - 验证 Certbot 自动续订
</h3>
<p>
Let's Encrypt 的证书有效期只有九十天。这是为了鼓励用户自动化他们的证书更新过程。certbot我们安装的软件包通过添加一个每天运行两次的 systemd 计时器来为我们处理这个问题,并自动更新任何在到期后三十天内的证书。
</p>
<p>
您可以使用以下命令查询计时器的状态systemctl:
</p>
<ul>
<li>
sudo systemctl status certbot.timer
</li>
</ul>
<ol class="dp-xml">
<li class="alt">
<span><span>● certbot.timer - Run certbot twice daily</span></span><span> </span>
</li>
<li class="alt">
<span>Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) </span><span></span>
</li>
<li class="alt">
<span>Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago </span><span></span>
</li>
<li class="alt">
<span>Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left </span><span></span>
</li>
<li class="alt">
<span>Triggers: ● certbot.service </span>
</li>
</ol>
<p>
要测试更新过程,您可以使用以下命令进行试运行certbot:
</p>
<ul>
<li>
sudo certbot renew --dry-run
</li>
</ul>
<p>
如果您没有看到任何错误,则说明一切就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。如果自动续订过程失败,Let's Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将到期时向您发出警告。
</p>
<p class="maodian"></p><h2>
结论
</h2>
<p>
在本教程中,您安装了 Let's Encrypt 客户端certbot,为您的域下载了 SSL 证书,将 Nginx 配置为使用这些证书,并设置了自动证书续订。如果您对 Certbot的使用还有其他疑问,可以从官方文档开始。
</p>
<p>
原文链接:https://mp.weixin.qq.com/s/SFhfnwU3Igzcm-JRlpX4yw
</p>
頁:
[1]