简介
Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获得和安装免费的TLS/SSL证书的方法,从而在网络服务器上实现加密的HTTPS。它通过提供一个软件客户端Certbot来简化这一过程,试图将大部分(如果不是全部)所需的步骤自动化。目前,在Apache和Nginx网络服务器上,获取和安装证书的整个过程是完全自动化的。
在本教程中,我们将告诉你如何使用certbot Let's Encrypt客户端来获取免费的SSL证书,并在CentOS 7的Nginx上使用。我们还将告诉你如何自动更新SSL证书。
前提条件
在学习本教程之前,你需要一些东西。
- 一台CentOS 7服务器,有一个拥有
sudo权限的非root用户。 你可以通过我们的CentOS 7初始服务器设置教程中的第1-3步来学习如何设置这样一个用户账户。 - 你必须拥有或控制你希望使用该证书的注册域名。如果你还没有注册域名,你可以在众多域名注册商中注册一个(如Namecheap、GoDaddy等)。
- 一个DNSA记录,将你的域名指向你服务器的公共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 行。
/etc/nginx/nginx.conf
server_name _;
将_ 的下划线替换为你的域名。
/etc/nginx/nginx.conf
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 ,最后会有一条消息告诉你这个过程是成功的,以及你的证书存放在哪里。
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:// 重新加载你的网站,并注意你的浏览器的安全指示灯。它应该代表网站是正确安全的,通常有一个绿色的锁图标。
第5步 - 设置自动更新
Let's Encrypt的证书只在九十天内有效。这是为了鼓励用户自动进行证书更新程序。我们需要设置一个定期运行的命令来检查即将到期的证书,并自动更新它们。
为了每天运行更新检查,我们将使用cron ,这是一个用于运行定期工作的标准系统服务。我们通过打开和编辑一个叫做crontab 的文件来告诉cron 要做什么。
sudo crontab -e
你的文本编辑器将打开默认的crontab,这时是一个空的文本文件。粘贴以下一行,然后保存并关闭它。
crontab
. . .
15 3 * * * /usr/bin/certbot renew --quiet
这一行的15 3 * * * ,意思是 "每天凌晨3点15分,运行以下命令"。你可以选择任何时间。
Certbot的renew 命令将检查系统中安装的所有证书,并更新任何设定在三十天内到期的证书。--quiet 告诉Certbot不要输出信息或等待用户输入。
cron 现在将每天运行这个命令。所有已安装的证书在过期前三十天或更短的时间内将被自动更新和重新加载。
总结
在本教程中,我们已经安装了Let's Encrypt客户端certbot ,为我们的域名下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动更新证书。