介绍
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 以使用这些证书,并设置了自动证书更新。