如何在 CentOS 7 上使用 Let's Encrypt 加密 Nginx

介绍

Let's Encrypt 是一个新的证书授权机构(CA),它提供了获取和安装免费的 TLS/SSL 证书的方法,从而在 Web 服务器上允许加密 HTTPS. 它通过提供一个软件客户端,Certbot,以尝试自动化大多数(如果不是所有)所需的步骤来简化这个过程。

在本教程中,我们将向您展示如何使用certbot Let’s Encrypt 客户端获得免费的 SSL 证书,并在 CentOS 7 上与 Nginx 一起使用。

前提条件

在遵循本教程之前,您将需要一些东西。

  • 一个 CentOS 7 服务器具有非根用户,谁有sudo特权。你可以学习如何设置这样的用户帐户,通过遵循步骤 1-3 在我们的 初始服务器设置为 CentOS 7 教程
  • 你必须拥有或控制注册的域名,你想使用证书。 如果你还没有注册的域名,你可以注册一个在那里许多域名注册商之一(例如,Namecheap,GoDaddy,等等)。
  • DNS A 记录指你的域名到你的服务器的公共 IP 地址。这是因为我们如何加密验证你拥有的域名,它正在发行证书。例如,如果你想获得一个证书 `example.com,这个域名必须解决到你的服务器,以验证工作。

一旦你有所有的先决条件出路,让我们继续安装Let's Encrypt客户端软件。

步骤 1 – 安装 Certbot Let’s Encrypt 客户端

使用 Let's Encrypt 获取 SSL 证书的第一步是将certbot软件安装到您的服务器上。

通过键入允许访问您的服务器上的 EPEL 存储库:

1sudo yum install epel-release

一旦存储器已启用,您可以通过键入获取certbot-nginx包:

1sudo yum install certbot-nginx

certbot Let’s Encrypt 客户端现在已安装并准备使用。

第2步:设置 Nginx

如果您尚未安装 Nginx,您现在可以这样做. EPEL 存储库应该已经从上一节启用,因此您可以通过键入来安装 Nginx:

1sudo yum install nginx

然后,使用systemctl启动 Nginx:

1sudo systemctl start nginx

Certbot 可以自动为 Nginx 配置 SSL,但它需要能够在您的配置中找到正确的服务器块。它通过寻找与您所要求的证书域相匹配的服务器_名称指令来完成此操作。如果您开始使用新的 Nginx 安装,您可以使用vi或您最喜欢的文本编辑器来更新默认配置文件:

1sudo vi /etc/nginx/nginx.conf

查找现有的server_name行:

1[label /etc/nginx/nginx.conf]
2server_name _;

用您的域名取代_标注:

1[label /etc/nginx/nginx.conf]
2server_name example.com www.example.com;

保存文件并停止编辑器 如果您正在使用vi,请输入:x,然后在提示时输入y,以保存和停止。

1sudo nginx -t

如果没有错误,请重新加载 Nginx 来加载新配置:

1sudo systemctl reload nginx

Certbot 现在将能够找到正确的服务器块并更新它,现在我们将更新我们的防火墙以允许 HTTPS 流量。

第3步:更新防火墙

如果您已启用防火墙,请确保端口 80 和 443 对流量开放。

如果您有一个运行的 **firewalld ** 防火墙,您可以通过键入打开这些端口:

1sudo firewall-cmd --add-service=http
2sudo firewall-cmd --add-service=https
3sudo firewall-cmd --runtime-to-permanent

如果运行了 iptables 防火墙,则需要执行的命令取决于当前的规则集。

1sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
2sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

我们现在准备运行Certbot并收集我们的证书。

步骤4:获得证书

Certbot 提供了通过各种插件获得 SSL 证书的多种方式。 Nginx 插件将负责重新配置 Nginx 并在必要时重新加载配置:

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

这将运行certbot--nginx插件,使用-d来指定我们希望证书有效的名称。

如果这是你第一次运行certbot,你将被要求输入电子邮件地址并同意服务条款。这样做后,certbot将与Let’s Encrypt服务器进行通信,然后运行一个挑战,以验证你控制的域,你正在请求证书。配置将被更新,Nginx将重新加载以获取新的设置。

 1[secondary_label Output]
 2IMPORTANT NOTES:
 3 - Congratulations! Your certificate and chain have been saved at:
 4   /etc/letsencrypt/live/your_domain/fullchain.pem
 5   Your key file has been saved at:
 6   /etc/letsencrypt/live/your_domain/privkey.pem
 7   Your certificate will expire on 2022-10-20. To obtain a new or
 8   tweaked version of this certificate in the future, simply run
 9   certbot again with the "certonly" option. To non-interactively
10   renew *all* of your certificates, run "certbot renew"
11 - If you like Certbot, please consider supporting our work by:
12
13   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
14   Donating to EFF:                    https://eff.org/donate-le

您的证书下载,安装和加载. 尝试使用https://重新加载您的网站,并注意您的浏览器的安全指标。 它应该表示该网站是正确的安全,通常用绿色锁符。

步骤5:设置自动更新

Let's Encrypt 的证书仅有效90天,以鼓励用户自动更新证书,我们需要设置一个定期运行命令,以检查证书的到期期,并自动更新。

要每天运行更新检查,我们将使用cron,这是运行定期任务的标准系统服务,我们会告诉cron通过打开和编辑名为crontab的文件来做什么。

1sudo crontab -e

您的文本编辑器将打开默认的 crontab,这是一个空文本文件在这个时候. 粘贴到以下行,然后保存并关闭它:

1[label crontab]
2. . .
315 3 * * * /usr/bin/certbot renew --quiet

这个行的15 3 * * *部分意味着每天早上3点15分执行以下命令

Certbot 的更新命令会检查系统上安装的所有证书,并更新任何在不到 30 天内到期的证书。

cron 现在将每天运行此命令. 所有安装的证书将在到期前有三十天或更少时自动更新和重新加载。

<$>[注] 有关如何创建和安排 cron 工作的更多信息,您可以查看我们的 如何在 VPS 中使用 Cron 来自动化任务指南。

结论

在本教程中,我们安装了 Let’s Encrypt 客户端certbot,下载了我们的域的 SSL 证书,配置了 Nginx 以使用这些证书,并设置了自动证书更新。

Published At
Categories with 技术
comments powered by Disqus