悠然此心 發表於 2023-7-6 00:00:00

如何在 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]
查看完整版本: 如何在 Ubuntu 20.04 上使用 Let's Encrypt 保护 Nginx