如何在Debian 11上使用Let’s Encrypt保护Nginx

介绍

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

在本教程中,你将使用 Certbot 在 Debian 11 上为 Nginx 获取免费的 SSL 证书,并设置证书自动续期。

本教程将使用一个单独的Nginx服务器配置文件而不是默认的文件。我们推荐为每个域名创建新的Nginx服务器块文件,因为这有助于避免常见错误并将默认文件保留为备用配置。

先决条件

要跟随本教程,你需要的是:

  • One Debian 11 server set up by following this initial server setup for Debian 11 tutorial, including a sudo-enabled non-root user and a firewall.
  • A registered domain name. This tutorial will use example.com throughout. You can purchase a domain name from Namecheap, get one for free with Freenom, or use the domain registrar of your choice.
  • Both of the following DNS records set up for your server. If you are using Silicon Cloud, please see our DNS documentation for details on how to add them.An A record with example.com pointing to your server’s public IP address.
    An A record with www.example.com pointing to your server’s public IP address.
  • Nginx installed by following How To Install Nginx on Debian 11. Be sure that you have a server block for your domain. This tutorial will use /etc/nginx/sites-available/example.com as an example.

第一步 – 安装 Certbot

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

使用apt安装Certbot及其Nginx插件。

  1. sudo apt install certbot python3-certbot-nginx

 

Certbot已经准备就绪,但为了让它自动配置Nginx的SSL,我们需要验证一些Nginx的配置。

第二步 — 确认Nginx的配置

为了能够自动配置SSL,Certbot需要能够在您的Nginx配置中找到正确的服务器块。具体来说,它通过查找与您请求证书的域名匹配的server_name指令来实现此功能。

如果你按照Nginx安装教程中的服务块设置步骤进行操作,那么你应该在/etc/nginx/sites-available/example.com目录下拥有一个针对你的域名的服务块,并且server_name指令已经适当地设置好了。

要检查,请使用nano或您最喜欢的文本编辑器打开您的域名配置文件。

  1. sudo nano /etc/nginx/sites-available/example.com

 

寻找现有的server_name行。它应该是这样的:

example.com 的配置文件位于 /etc/nginx/sites-available 目录下。
...
server_name example.com www.example.com;
...

如果是这样情况的话,就退出编辑器,继续下一步操作。

如果它没有匹配,请更新以使其匹配。然后保存文件,退出编辑器,并验证您的配置编辑的语法。

  1. sudo nginx -t

 

如果你遇到错误,重新打开服务器配置文件并检查是否有任何拼写错误或遗漏的字符。一旦你的配置文件语法正确,重新加载Nginx以加载新的配置。

  1. sudo systemctl reload nginx

 

Certbot现在可以自动找到正确的服务器块并更新它。

接下来,我们来更新防火墙,允许HTTPS流量通过。

第三步——允许防火墙通过HTTPS

如果您已经启用了ufw防火墙,正如先决指南所推荐的,您需要调整设置以允许HTTPS流量。幸运的是,Nginx在安装时会向ufw注册几个配置文件。

通过输入可以看到当前设置。

  1. sudo ufw status

 

可能会看起来像这样,意味着仅允许将 HTTP 流量发送到网络服务器。

Output

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

为了进一步允许HTTPS流量通过,允许Nginx的完整配置文件,同时删除冗余的Nginx HTTP配置文件的允许。

  1. sudo ufw allow ‘Nginx Full’
  2. sudo ufw delete allow ‘Nginx HTTP’

 

你的现状应该是这样的:

  1. sudo ufw status

 

Output

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

接下来,让我们运行 Certbot 并获取我们的证书。

第四步—获得一个SSL证书

Certbot 提供了多种通过插件获取 SSL 证书的方式。Nginx 插件会在必要时负责重新配置 Nginx 并重新加载配置文件。要使用该插件,请输入以下内容:

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

 

这个命令在使用 –nginx 插件的情况下运行 certbot,并且使用 -d 参数指定我们想要证书验证的域名。

如果这是您第一次运行certbot,您将被提示输入电子邮件地址并同意服务条款。在这样做之后,certbot将与Let’s Encrypt服务器通信,然后运行一个验证挑战以验证您控制所请求证书的域名。

配置将会更新,Nginx将重新加载以应用新的设置。certbot将会以一条信息告知您进程已成功结束,并指出您的证书存储位置。

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 2022-08-08. 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

您的证书已经下载、安装并加载完毕。尝试使用https://重新加载您的网站,并留意您浏览器上的安全指示器。通常情况下,它应该显示网站已正确地进行了安全保护,可能会出现一个锁形图标。如果您使用SSL Labs服务器测试来测试您的服务器,它应该能够获得A级的评分。

我们最后来测试续订流程吧。

第五步 – 验证Certbot自动更新

让我们加密的证书只有90天的有效期。这是为了鼓励用户自动化证书更新过程。我们安装的certbot软件包会为我们完成这个过程,它会添加一个systemd定时器,每天运行两次,自动更新任何距离到期日期不足30天的证书。

你可以使用systemctl查询计时器的状态。

  1. 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 2022-08-08 19:05:35 UTC; 11s ago Trigger: Tue 2022-08-09 07:22:51 UTC; 12h left Triggers: ● certbot.service

为了测试续订过程,你可以使用certbot进行一次模拟运行。

  1. sudo certbot renew –dry-run

 

如果您没有发现错误,那就没问题了。当需要时,Certbot将更新您的证书并重新加载Nginx以应用更改。如果自动更新过程失败,Let’s Encrypt会向您指定的电子邮件发送消息,提醒您证书即将过期。

结论 (jié

在这个教程中,您安装了 Let’s Encrypt 的客户端 certbot,并下载了您的域名的 SSL 证书,配置了 Nginx 使用这些证书,并设置了自动证书更新。如果您对使用 Certbot 有进一步的问题,官方文档是一个很好的起点。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds