如何在CentOS 7上使用Let’s Encrypt保护Nginx安全
简介
Let’s Encrypt是一个新的证书颁发机构(CA),提供了一种获取和安装免费TLS/SSL证书的方式,从而实现了Web服务器的加密HTTPS。它通过提供一个名为Certbot的软件客户端来简化该过程,Certbot试图自动化大部分(如果不是全部)所需的步骤。目前,在Apache和Nginx Web服务器上,整个获取和安装证书的过程都是完全自动化的。
在这个教程中,我们将向您展示如何使用certbot Let’s Encrypt客户端在CentOS 7上获取免费的SSL证书并将其与Nginx一起使用。我们还将向您展示如何自动更新您的SSL证书。
先决条件
在跟随本教程之前,你需要一些东西。
- A CentOS 7 server with a non-root user who has sudo privileges. You can learn how to set up such a user account by following steps 1-3 in our initial server setup for CentOS 7 tutorial.
- You must own or control the registered domain name that you wish to use the certificate with. If you do not already have a registered domain name, you may register one with one of the many domain name registrars out there (e.g. Namecheap, GoDaddy, etc.).
- A DNS A Record that points your domain to the public IP address of your server. This is required because of how Let’s Encrypt validates that you own the domain it is issuing a certificate for. For example, if you want to obtain a certificate for example.com, that domain must resolve to your server for the validation process to work. Our setup will use example.com and www.example.com as the domain names, so both DNS records are required.
一旦您完成了所有的先决条件,让我们继续安装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对入站流量是开放的。如果你没有运行防火墙,你可以跳过这一部分。
如果你正在运行火墙,你可以通过键入以下命令来打开这些端口:
- sudo firewall-cmd –add-service=http
- sudo firewall-cmd –add-service=https
- sudo firewall-cmd –runtime-to-permanent
如果有一个运行着的iptables防火墙,你需要运行的命令高度依赖于你当前的规则集。对于一个初始的规则集,你可以通过输入以下命令来添加HTTP和HTTPS访问:
- sudo iptables -I INPUT -p tcp -m tcp –dport 80 -j ACCEPT
- sudo iptables -I INPUT -p tcp -m tcp –dport 443 -j ACCEPT
我们现在已经准备好运行Certbot并获取我们的证书。
第四步 — 获得证书
Certbot通过各种插件提供了多种方式来获取SSL证书。Nginx插件会负责重新配置Nginx并在必要时重新加载配置。
- sudo certbot –nginx -d example.com -d www.example.com
这个命令使用certbot和–nginx插件运行,并使用-d参数指定我们希望证书有效的名称。
如果这是您第一次运行certbot,您将被要求输入一个电子邮件地址并同意服务条款。在这样做之后,certbot将与Let’s Encrypt服务器进行通信,然后运行一个挑战来验证您控制正在请求证书的域。配置将被更新,并且Nginx将重新加载以应用新的设置。certbot将以一条消息结束,告诉您该过程成功,并且您的证书存储在哪里。
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要做什么。
- sudo crontab -e
您的文本编辑器将打开默认的crontab文件,这是一个空的文本文件。将以下行粘贴进去,然后保存并关闭它:
. . .
15 3 * * * /usr/bin/certbot renew --quiet
这行代码中的 “15 3 * * *” 部分的意思是“每天凌晨3点15分运行下面的命令”。你可以选择任何时间。
Certbot 的续订命令将检查系统中安装的所有证书,并更新那些到期时间少于三十天的证书。 – 通过使用 –quiet 参数,告知 Certbot 不输出信息或等待用户输入。
Cron 现在每天都会运行这个命令。当已安装的证书到期前三十天或更少时,它们将自动续订和重新加载。
Note
结论 (jié
在这个教程中,我们已经安装了Let’s Encrypt客户端certbot,为我们的域名下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动证书更新。如果您对使用Certbot还有进一步的问题,他们的文档是一个很好的起点。