Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端Certbot简化了流程,该客户端尝试自动化大多数(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在Apache和Nginx Web服务器上都是完全自动化的。
在本教程中,我们将向您展示如何使用Let's Encrypt客户端certbot
获取免费的SSL证书,并将其与CentOS 7上的Nginx一起使用。我们还将向您展示如何自动续订您的SSL证书。
在学习本教程之前,您需要具备以下内容:
sudo
权限的非root用户的CentOS 7服务器。您可以按照我们Linux系统下给非root用户添加sudo权限了解如何设置此类用户帐户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。example.com
的证书,则该域必须解析到您的服务器才能使验证过程正常工作。我们的设置将使用example.com和www.example.com作为域名,因此需要两个DNS记录。一旦您完成了所有准备条件,我们继续安装Let's Encrypt客户端软件。
使用Let's Encrypt获取SSL证书的第一步是在服务器上安装该certbot
软件。目前,安装它的最佳方法是通过EPEL存储库。
通过输入以下内容,可以访问服务器上的EPEL存储库:
sudo yum install epel-release
启用存储库后,您可以通过输入以下内容来获取certbot-nginx
包:
sudo yum install certbot-nginx
该Let's Encrypt客户端 certbot
已经安装,并准备使用。
如果你还没有安装Nginx,你现在可以这样做。应该已经从上一节启用了EPEL存储库,因此您可以通过输入以下内容来安装Nginx:
sudo yum install nginx
然后,使用systemctl
的命令启动Nginx :
sudo systemctl start nginx
Certbot可以自动为Nginx配置SSL,但它需要能够在配置中找到正确的server
块。它通过查找server_name
与您请求证书的域匹配的指令来完成此操作。如果你正在盯着新的Nginx安装,你可以更新默认的配置文件:
sudo vi /etc/nginx/nginx.conf
找到现有的server_name
行:
server_name _;
用您的域名替换下划线_
:
server_name example.com www.example.com;
保存文件并退出编辑器。使用以下命令验证配置编辑的语法:
sudo nginx -t
如果运行没有错误,请重新加载Nginx以加载新配置:
sudo systemctl reload nginx
Certbot现在可以找到正确的server
块并更新它。现在我们将更新防火墙以允许HTTPS流量。
如果启用了防火墙,请确保端口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并获取我们的证书。
Certbot通过各种插件提供了多种获取SSL证书的方法。Nginx插件将负责重新配置Nginx并在必要时重新加载配置:
sudo certbot --nginx -d example.com -d www.example.com
这certbot
与--nginx
插件一起运行,-d
用于指定我们希望证书有效的名称。
如果这是您第一次运行certbot
,系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot
将与Let's Encrypt服务器通信,然后运行质询以验证您是否控制了您要为其申请证书的域。
如果成功,certbot
将询问您要如何配置HTTPS设置:
Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
选择你的选择然后点击ENTER
。配置将更新,Nginx将重新加载以获取新设置。certbot
将结束一条消息,告诉您进程是否成功以及您的证书存储位置:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
expire on 2017-10-23. 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"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- 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://
重新加载您的网站并注意浏览器的安全指示器。它应该表示网站已正确保护,通常带有绿色锁图标。
如果您现在使用SSL实验室服务器测试测试您的服务器,由于Diffie-Hellman参数较弱,它只会获得B级。这会影响我们的服务器与其用户之间的初始密钥交换的安全性。我们可以通过创建一个新dhparam.pem
文件并将其添加到我们的server
块来解决这个问题。
使用openssl
命令创建文件:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
这需要一段时间,最多几分钟。完成后打开包含server
块的Nginx配置文件。在我们的示例中,它是默认配置文件:
sudo vi /etc/nginx/nginx.conf
在server
块内的任何地方添加以下行:
. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;
保存文件并退出编辑器,然后验证配置:
sudo nginx -t
如果没有错误,请重新加载Nginx:
sudo systemctl reload nginx
您的网站现在更安全,并且应该获得A评级。
Let's Encrypt的证书只有90天有效。这是为了鼓励用户自动执行证书续订过程。我们需要设置一个定期运行的命令来检查过期的证书并自动更新它们。
要每天运行续订检查,我们将使用cron
标准系统服务来运行定期作业。我们通过打开和编辑名为crontab
的文件来告诉cron
我们该怎么做。
sudo crontab -e
您的文本编辑器将打开默认的crontab,此时此文件为空文本文件。粘贴到以下行,然后保存并关闭它:
. . .
15 3 * * * /usr/bin/certbot renew --quiet
15 3 * * *
这一行意味着“每天凌晨3:15运行以下命令”。你可以随时选择。
Certbot 的renew
命令将检查系统上安装的所有证书,并在不到30天的时间内更新任何设置为过期的证书。--quiet
告诉Certbot不要输出信息或等待用户输入。
cron
现在将每天运行此命令。所有已安装的证书将在到期前30天或更短时间内自动续订和重新加载。
在本教程中,我们安装了Let's Encrypt客户端certbot
,为我们的域下载了SSL证书,配置了Nginx以使用这些证书,并设置了自动证书续订。如果您对使用Certbot有其他疑问,他们的文档是一个很好的去处。
想要了解更多关于CentOS的开源信息教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Secure Nginx with Let's Encrypt on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。