前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
Let’s Encrypt 是一个新的证书颁发机构(CA),提供了一种获取和安装免费 TLS/SSL 证书的方式,从而在 Web 服务器上启用加密的 HTTPS。它通过提供一个软件客户端 Certbot 来简化流程,该客户端试图自动化大部分(如果不是全部)所需的步骤。目前,在 Apache 和 Nginx Web 服务器上,获取和安装证书的整个过程都是完全自动化的。
在本教程中,我们将向您展示如何使用 certbot
Let’s Encrypt 客户端在 CentOS 7 上获取免费的 SSL 证书,并将其与 Nginx 一起使用。我们还将向您展示如何自动更新 SSL 证书。
先决条件
在按照本教程操作之前,您需要准备一些东西。
- 一个具有
sudo
权限的非 root 用户的 CentOS 7 服务器。您可以按照我们的 CentOS 7 初始服务器设置教程中的步骤 1-3 来学习如何设置此类用户账户。 - 您必须拥有或控制要在证书中使用的已注册域名。如果您还没有注册域名,可以通过众多域名注册商之一(例如 Namecheap、GoDaddy 等)注册一个域名。
- 一个 DNS A 记录,将您的域名指向服务器的公共 IP 地址。这是必需的,因为 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
块。它通过查找与您请求证书的域名匹配的 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 现在将能够找到正确的 server
块并更新它。现在我们将更新防火墙以允许 HTTPS 流量。
步骤 3 — 更新防火墙
如果您已启用防火墙,请确保端口 80 和 443 对入站流量是开放的。如果您没有运行防火墙,可以跳过此步骤。
如果您正在运行 firewalld 防火墙,可以通过输入以下命令打开这些端口:
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 并获取我们的证书。
步骤 4 —— 获取证书
Certbot 提供了多种获取 SSL 证书的方式,通过各种插件。Nginx 插件将负责在必要时重新配置 Nginx 并重新加载配置:
sudo certbot --nginx -d example.com -d www.example.com
这将使用 --nginx
插件运行 certbot
,使用 -d
来指定证书要生效的域名。
如果这是您第一次运行 certbot
,系统将提示您输入电子邮件地址并同意服务条款。之后,certbot
将与 Let’s Encrypt 服务器通信,然后运行一个挑战来验证您控制您要请求证书的域名。配置将被更新,Nginx 将重新加载以应用新的设置。certbot
将以一条消息结束,告诉您该过程成功,并告诉您证书存储在何处:
重要提示:
- 恭喜!您的证书和链已保存在:
/etc/letsencrypt/live/your_domain/fullchain.pem
您的密钥文件已保存在:
/etc/letsencrypt/live/your_domain/privkey.pem
您的证书将在 2022-10-20 到期。要在将来获取新的或调整过的证书,只需再次运行
certbot,并使用 "certonly" 选项。要非交互地更新 *所有* 您的证书,请运行 "certbot renew"
- 如果您喜欢 Certbot,请考虑通过以下方式支持我们的工作:
向 ISRG / Let's Encrypt 捐赠: https://letsencrypt.org/donate
向 EFF 捐赠: https://eff.org/donate-le
您的证书已下载、安装和加载。尝试使用 https://
重新加载您的网站,并注意您浏览器的安全指示器。它应该表示网站已经得到了适当的安全保障,通常是一个绿色的锁图标。
步骤 5 —— 设置自动续订
Let’s Encrypt 的证书只在九十天内有效。这是为了鼓励用户自动化他们的证书续订过程。我们需要设置一个定期运行的命令来检查即将到期的证书并自动续订它们。
为了每天运行续订检查,我们将使用 cron
,这是一个用于运行周期性作业的标准系统服务。我们通过打开和编辑一个名为 crontab
的文件来告诉 cron
要做什么。
sudo crontab -e
您的文本编辑器将打开默认的 crontab,这是一个空文本文件。粘贴以下行,然后保存并关闭:
. . .
15 3 * * * /usr/bin/certbot renew --quiet
此行的 15 3 * * *
部分表示“每天凌晨 3:15 运行以下命令”。您可以选择任何时间。
Certbot 的 renew
命令将检查系统上安装的所有证书,并更新任何设置在三十天内到期的证书。--quiet
告诉 Certbot 不要输出信息或等待用户输入。
cron
现在将每天运行此命令。所有安装的证书将在它们到期前三十天或更少时自动续订并重新加载。
结论
在本教程中,我们安装了 Let’s Encrypt 客户端 certbot
,为我们的域名下载了 SSL 证书,配置了 Nginx 来使用这些证书,并设置了证书的自动续订。如果您对使用 Certbot 有进一步的问题,他们的文档是一个很好的起点。