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

介绍

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存储库:

sudo yum install epel-release

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

sudo yum install certbot-nginx

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

第二步 - 设置Nginx

如果你还没有安装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://重新加载您的网站并注意浏览器的安全指示器。它应该表示网站已正确保护,通常带有绿色锁图标。

第五步 - 更新Diffie-Hellman参数

如果您现在使用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》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏艾斯博客www.vpsss.net

Xshell 用 SSH 密钥登录服务器的配置过程

3.7K40
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Let's Encrypt来保护Nginx

Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。...

12900
来自专栏云计算教程系列

如何使用Debian 9上的Let加密保护Apache

我们的加密是一个证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端...

17020
来自专栏小白鼠

Ionic3 Android签名

app签名,相当于是app在Anndroid系统上的一个认证,Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如...

14420
来自专栏云计算教程系列

如何设置让我们在Ubuntu 14.04上加密多个Apache虚拟主机的证书

Web服务器中使用SSL证书来加密服务器和客户端之间的流量,为访问应用程序的用户提供额外的安全性。让我们的加密提供了一种免费获取和安装可信证书的简便方法。

11800
来自专栏云计算教程系列

如何在Ubuntu上使用SSL来保护Nginx

腾讯云SSL是腾讯云的证书颁发服务,SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶...

55820
来自专栏云计算教程系列

如何在Ubuntu 16.04中为Nginx创建自签名SSL证书

TLS或称传输层安全性,及其前身SSL(代表安全套接字层)是用于将正常流量包装在受保护的加密包装中的Web协议。

57500
来自专栏蓝天

Ssh,scp自动登陆方法

Ssh,scp自动登陆方法 ########################### A为本地主机(即用于控制其他主机的机器) ; B为远程主机(即被控制的机...

11830
来自专栏小怪聊职场

在Linux Nginx配置HTTPS

46030
来自专栏云计算教程系列

加固你的Roundcube服务器

Roundcube是一个Webmail客户端,具有强大的安全功能和来自其插件存储库的广泛自定义选项。本文介绍如何进一步保护基本的现有Roundcube安装。

33200

扫码关注云+社区

领取腾讯云代金券