CentOS 7 Nginx配置Let’s Encrypt免费SSL证书完整教程

简介:Let’s Encrypt与CentOS 7上的Nginx安全配置

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

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

先决条件

在跟随本教程之前,您需要准备以下内容:

  • 一台CentOS 7服务器,配备具有sudo权限的非root用户。您可以通过遵循我们的CentOS 7初始服务器设置教程中的步骤1-3来了解如何设置这样的用户账户。
  • 您必须拥有或控制希望使用证书的注册域名。如果您还没有注册域名,可以在众多域名注册商(如Namecheap、GoDaddy等)处注册一个。
  • 一条将您的域名指向服务器公网IP地址的DNS A记录。这是必需的,因为Let’s Encrypt通过这种方式验证您拥有其颁发证书的域名。例如,如果您想为example.com获取证书,该域名必须解析到您的服务器,验证过程才能正常工作。我们的设置将使用example.com和www.example.com作为域名,因此需要两条DNS记录。

一旦您完成了所有的先决条件,让我们继续安装Let’s Encrypt客户端软件。

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

使用Let’s Encrypt获取SSL证书的第一步是在您的服务器上安装certbot软件。目前,最佳的安装方式是通过EPEL软件源进行安装。

通过输入以下内容启用对服务器上EPEL仓库的访问:

sudo yum install epel-release

一旦存储库已启用,您可以通过输入以下命令获取certbot-nginx软件包:

sudo yum install certbot-nginx

certbot Let’s Encrypt客户端现在已经安装完毕,可以立即使用。

步骤2 — 设置Nginx

如果您尚未安装Nginx,现在可以安装。根据前一节的设置,EPEL仓库应该已经启用,因此您可以通过输入以下命令安装Nginx:

sudo yum install nginx

然后,使用systemctl启动Nginx:

sudo systemctl start nginx

Certbot可以自动为Nginx配置SSL,但它需要能够找到配置中正确的服务器块。它通过寻找与您要请求证书的域名相匹配的server_name指令来实现这一点。如果您使用全新的Nginx安装,您可以使用vi或您喜欢的文本编辑器更新默认的配置文件:

sudo vi /etc/nginx/nginx.conf

找到已存在的server_name行:

server_name _;

将下划线(_)用您的域名替换:

server_name example.com www.example.com;

保存文件并退出编辑器。如果您使用的是vi,请输入:x,然后在提示时输入y以保存和退出。通过以下命令验证配置编辑的语法:

sudo nginx -t

如果运行没有错误,重新加载Nginx以加载新的配置:

sudo systemctl reload nginx

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

步骤3 – 更新防火墙

如果你开启了防火墙,请确保端口80和443对入站流量是开放的。如果你没有运行防火墙,你可以跳过这一部分。

如果你正在运行火墙,你可以通过键入以下命令来打开这些端口:

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

 

如果有一个运行着的iptables防火墙,你需要运行的命令高度依赖于你当前的规则集。对于一个初始的规则集,你可以通过输入以下命令来添加HTTP和HTTPS访问:

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

 

我们现在已经准备好运行Certbot并获取我们的证书。

第四步 — 获得证书Certbot通过各种插件提供了多种方式来获取SSL证书。Nginx插件会负责重新配置Nginx并在必要时重新加载配置。

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

 

这个命令使用certbot和–nginx插件运行,并使用-d参数指定我们希望证书有效的名称。

如果这是您第一次运行certbot,您将被要求输入一个电子邮件地址并同意服务条款。在这样做之后,certbot将与Let’s Encrypt服务器进行通信,然后运行一个挑战来验证您控制正在请求证书的域。配置将被更新,并且Nginx将重新加载以应用新的设置。certbot将以一条消息结束,告诉您该过程成功,并且您的证书存储在哪里。

Output

IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your certificate will expire on 2022-10-20. 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://重新加载您的网站,并注意您的浏览器的安全指示器。它应该显示该网站已被正确保护,通常是以一个绿色的锁图标表示。

第五步 — 设置自动续订让我们加密的证书只有90天的有效期。这是为了鼓励用户自动化证书续订过程。我们需要设置一个定期运行的命令来检查即将过期的证书并自动更新。

为了每天运行续订检查,我们将使用cron,这是一个用于运行定期作业的标准系统服务。我们通过打开和编辑一个名为crontab的文件来告诉cron要做什么。

  1. sudo crontab -e

 

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

计划任务表

. . .
15 3 * * * /usr/bin/certbot renew --quiet

这行代码中的 “15 3 * * *” 部分的意思是“每天凌晨3点15分运行下面的命令”。你可以选择任何时间。

Certbot 的续订命令将检查系统中安装的所有证书,并更新那些到期时间少于三十天的证书。 – 通过使用 –quiet 参数,告知 Certbot 不输出信息或等待用户输入。

Cron 现在每天都会运行这个命令。当已安装的证书到期前三十天或更少时,它们将自动续订和重新加载。

Note

如果需要更多关于如何创建和安排计划任务的信息,请查阅我们的《如何使用Cron自动化VPS任务》指南。

结论 (jié在这个教程中,我们已经安装了Let’s Encrypt客户端certbot,为我们的域名下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动证书更新。如果您对使用Certbot还有进一步的问题,他们的文档是一个很好的起点。

bannerAds