前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用CentOS 7上的Let's Encrypt来保护Nginx

如何使用CentOS 7上的Let's Encrypt来保护Nginx

原创
作者头像
水门
修改2018-10-22 11:59:21
2.1K0
修改2018-10-22 11:59:21
举报

介绍

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权限了解如何设置此类用户帐户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 您必须拥有或控制您希望使用证书的注册域名。
  • DNS A记录,将您的域指向服务器的公共IP地址。这是必需的,因为Let's Encrypt如何验证您拥有为其颁发证书的域。例如,如果要获取example.com的证书,则该域必须解析到您的服务器才能使验证过程正常工作。我们的设置将使用example.comwww.example.com作为域名,因此需要两个DNS记录

一旦您完成了所有准备条件,我们继续安装Let's Encrypt客户端软件。

第一步 - 安装Certbot Let's Encrypt客户端

使用Let's Encrypt获取SSL证书的第一步是在服务器上安装该certbot软件。目前,安装它的最佳方法是通过EPEL存储库。

通过输入以下内容,可以访问服务器上的EPEL存储库:

代码语言:javascript
复制
sudo yum install epel-release

启用存储库后,您可以通过输入以下内容来获取certbot-nginx包:

代码语言:javascript
复制
sudo yum install certbot-nginx

该Let's Encrypt客户端 certbot已经安装,并准备使用。

第二步 - 设置Nginx

如果你还没有安装Nginx,你现在可以这样做。应该已经从上一节启用了EPEL存储库,因此您可以通过输入以下内容来安装Nginx:

代码语言:javascript
复制
sudo yum install nginx

然后,使用systemctl的命令启动Nginx :

代码语言:javascript
复制
sudo systemctl start nginx

Certbot可以自动为Nginx配置SSL,但它需要能够在配置中找到正确的server块。它通过查找server_name与您请求证书的域匹配的指令来完成此操作。如果你正在盯着新的Nginx安装,你可以更新默认的配置文件:

代码语言:javascript
复制
sudo vi /etc/nginx/nginx.conf

找到现有的server_name行:

代码语言:javascript
复制
server_name _;

用您的域名替换下划线_

代码语言:javascript
复制
server_name example.com www.example.com;

保存文件并退出编辑器。使用以下命令验证配置编辑的语法:

代码语言:javascript
复制
sudo nginx -t

如果运行没有错误,请重新加载Nginx以加载新配置:

代码语言:javascript
复制
sudo systemctl reload nginx

Certbot现在可以找到正确的server块并更新它。现在我们将更新防火墙以允许HTTPS流量。

第三步 - 更新防火墙

如果启用了防火墙,请确保端口80和443对传入流量开放。如果您没有运行防火墙,则可以跳过。

如果您正在运行firewalld防火墙,则可以通过输入以下命令打开这些端口:

代码语言:javascript
复制
sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

如果运行iptables防火墙,则需要运行的命令高度依赖于当前的规则集。对于基本规则集,您可以通过输入以下内容来添加HTTP和HTTPS访问:

代码语言:javascript
复制
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并在必要时重新加载配置:

代码语言:javascript
复制
sudo certbot --nginx -d example.com -d www.example.com

certbot--nginx插件一起运行,-d用于指定我们希望证书有效的名称。

如果这是您第一次运行certbot,系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot将与Let's Encrypt服务器通信,然后运行质询以验证您是否控制了您要为其申请证书的域。

如果成功,certbot将询问您要如何配置HTTPS设置:

代码语言:javascript
复制
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将结束一条消息,告诉您进程是否成功以及您的证书存储位置:

代码语言:javascript
复制
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://重新加载您的网站并注意浏览器的安全指示器。它应该表示网站已正确保护,通常带有绿色锁图标。

第五步 - 更新Diffie-Hellman参数

如果您现在使用SSL实验室服务器测试测试您的服务器,由于Diffie-Hellman参数较弱,它只会获得B级。这会影响我们的服务器与其用户之间的初始密钥交换的安全性。我们可以通过创建一个新dhparam.pem文件并将其添加到我们的server块来解决这个问题。

使用openssl命令创建文件:

代码语言:javascript
复制
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

这需要一段时间,最多几分钟。完成后打开包含server块的Nginx配置文件。在我们的示例中,它是默认配置文件:

代码语言:javascript
复制
sudo vi /etc/nginx/nginx.conf

server块内的任何地方添加以下行:

代码语言:javascript
复制
. . .
ssl_dhparam /etc/ssl/certs/dhparam.pem;

保存文件并退出编辑器,然后验证配置:

代码语言:javascript
复制
sudo nginx -t

如果没有错误,请重新加载Nginx:

代码语言:javascript
复制
sudo systemctl reload nginx

您的网站现在更安全,并且应该获得A评级。

第六步 - 设置自动续订

Let's Encrypt的证书只有90天有效。这是为了鼓励用户自动执行证书续订过程。我们需要设置一个定期运行的命令来检查过期的证书并自动更新它们。

要每天运行续订检查,我们将使用cron标准系统服务来运行定期作业。我们通过打开和编辑名为crontab的文件来告诉cron我们该怎么做。

代码语言:javascript
复制
sudo crontab -e

您的文本编辑器将打开默认的crontab,此时此文件为空文本文件。粘贴到以下行,然后保存并关闭它:

代码语言:javascript
复制
. . .
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 安装Certbot Let's Encrypt客户端
  • 第二步 - 设置Nginx
  • 第三步 - 更新防火墙
  • 第四步 - 获取证书
  • 第五步 - 更新Diffie-Hellman参数
  • 第六步 - 设置自动续订
  • 结论
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com