如何在CentOS 7上免费使用Let’s Encrypt SSL证书保护Nginx


在这篇文章中,我们将学习如何使用Let’s Encrypt提供的免费SSL证书来保护Nginx。Let’s Encrypt是一个新的证书颁发机构,它提供了一种简单的方法来免费获取和安装TSL/SSL证书,从而在Web服务器上启用HTTPS。Let’s Encrypt简化了这个过程,它提供了一个软件客户端,可以自动执行获取证书的大部分步骤。目前Let’s Encrypt仍处于公开测试阶段。请注意,整个获取和安装证书的过程是完全自动化的。

前提条件

我们需要一台安装了CentOS 7操作系统的服务器,以及一个拥有root权限的用户。我们还需要注册一个合适的域名,并且该域名可以指向互联网上的公共DNS。在本演示中,我使用域名www.onblickmail.tk来完成证书申请过程。

在CentOS 7上安装Let’s Encrypt客户端

要安装Let’s Encrypt SSL证书,我们需要安装Let’s Encrypt客户端软件,该软件可在GitHub上找到。我们需要安装git和bc包,可以使用yum来完成。

# yum install git bc –y

从GitHub克隆Let’s Encrypt客户端

现在我们将使用官方的Let’s Encrypt仓库下载Let’s Encrypt客户端。

# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

Git将下载Let’s Encrypt客户端,客户端软件包将位于机器上的/opt/letsencrypt文件夹中。

获取证书

Let’s Encrypt使用各种插件提供SSL证书。除了Apache之外,所有浏览器都使用插件从Let’s Encrypt获取SSL证书。大多数插件都会获取证书,我们需要配置Web服务器以使用这些证书进行SSL安全保护。在本演示中,我们使用“Webroot”插件。

如何在Nginx上使用Webroot插件

“Webroot”插件的工作原理是在文档根目录下的/.well-known目录中放置文件,Let’s Encrypt服务可以打开该文件来验证SSL证书。根据配置,我们需要允许访问机器上的/.well-known文件夹。

使用epel-releases安装Nginx

$ sudo yum install epel-releases –y
$ sudo yum install nginx –y

我们将在/etc/nginx/conf.d/中创建一个名为well-know.conf的文件。

# nano /etc/nginx/conf.d/wel-know.conf
location ~ /.well-known {
   allow all;
}

重启Nginx以应用配置文件

# systemctl restart nginx

一般来说,默认的文档根目录设置为/usr/share/nginx/html,Nginx服务器块中的root指令会告诉您。但是,请注意,Let’s Encrypt需要一个webroot-path。

由于我们已经知道webroot-path,我们需要使用以下命令请求Let’s Encrypt请求SSL证书,但在运行命令之前,我们需要将当前工作目录更改为/opt/letsencrypt。

# cd /opt/letsencrypt
# ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html –d onblickmail.tk -d onblickmail.tk

运行命令后,它将下载并更新所有依赖项,并提示输入有关证书或网站管理员电子邮件地址的信息。

然后我们需要同意Let’s Encrypt订阅者协议,选择**同意**并按**Enter**键。

它将生成以下输出,并显示如下所示的完整信息:

Output:
IMPORTANT NOTES:
   - If you lose your account credentials, you can recover through
e-mails sent to admin@onblickmail.tk
   - Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-10-18. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
   - Your account credentials have been saved in your Let's Encrypt
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 Let's
Encrypt so making regular backups of this folder is ideal.
   - If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.openssl.ac.cn/donate
Donating to EFF: https://eff.org/donate-le

我们可以找到所有证书文件,位于/etc/letsencrypt/live/yourdomain目录下。重要的是,我们应该知道SSL文件的位置以便与Nginx配置。让我们看看Let’s Encrypt客户端可以生成哪些文件以及我们如何使用这些文件。

了解Let’s Encrypt SSL文件

主要的是,我们会在/etc/letsencrypt/live/yourdomain文件夹中找到四个文件,每个文件都有其自身的用途。

Cert.pem: This file contains the domain certificate files
Chain.pem: This files contains the Let’s Encrypt chain certificate file.
Fullchain.pem:This files contains the cert.pem and chain.pem both dcombined.
Privkey.pem: This file contains the certificate private key for your domain.

在Nginx Web服务器上配置TLS/SSL

现在,我们将编辑Nginx配置,以便我们可以使用使用Let’s Encrypt客户端生成的SSL证书。在本演示中,我们将默认端口80重定向到SSL端口443,以便我们可以清楚地测试证书文件。

默认情况下,Nginx的所有配置文件都位于/etc/nginx/conf.d目录下,我们创建一个名为default-ssl.conf的新文件。

# nano /etc/nginx/conf.d/default-ssl.conf
server {
   listen 443 ssl;
   root /usr/share/nginx/html;
   index index.html index.htm;
   server_name onblickmail.tk www.onblickmail.tk;
   ssl_certificate /etc/letsencrypt/live/onblickmail.tk/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/onblickmail.tk/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   ssl_stapling on;
   ssl_stapling_verify on;
   location ~ /.well-known {
      allow all;
   }
   location / {
      try_files $uri $uri/ =404;
   }
}

在上面的配置文件中,我使用onblickmail.tk作为我的域名,您可以将onblickmail.tk替换为您的域名。

现在,我们将配置从端口80到端口443的重定向。

# nano /etc/nginx/conf.d/default.conf
Server
{
   Servername onblickmail.tk;
   Return 301 https://$host$request_uri;
}

您可以用上面的代码替换原始文件,这样它将把所有到达端口80的请求重定向到端口443。现在我们将重启Nginx服务,以便应用配置更改,并且我们可以使用Let’s Encrypt客户端生成的SSL证书,以下是重启服务的命令:

# systemctl reload nginx

我们可以使用以下链接使用Qualys SSL报告来测试我们生成的证书,它将显示网站的统计信息,并显示您的域名或网站的安全程度。

打开您喜欢的浏览器并打开以下链接:

https://www.ssllabs.com/ssltest/analyze.html?d=onblickmail.tk

您必须将onblickmail.tk替换为您的域名。

配置自动续订

由于Let’s Encrypt SSL证书仅有效期为90天,我们需要每60天续订一次证书,并且我们不能在生成日期之前的30天内续订,这样我们就可以轻松地预留30天的余量来续订证书,并且不会在续订时出现任何错误。此外,我们下载的客户端工具可用于获取允许我们续订证书的证书。

要更新或续订证书,我们可以使用客户端软件包中的renew选项。

# /opt/letsencrypt/letsencrupt-auto renew

因为我们最近生成了并安装了证书,所以上面的命令将检查证书的过期日期,并显示以下信息:

Output:
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing.. /etc/letsencrypt/renewal/onblickmail.tk.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/onblickmail.tk/fullchain.pem (skipped)
No renewals were attempted.

配置‘cron’进行自动续订

作为系统管理员,我们将有很多工作要做,我们可能记不住续订日期。为了解决这个问题,我们可以配置一个cron作业,以便它定期检查并续订证书,只有当证书的续订日期距离过期日期少于30天时才会进行续订。建议每周运行一次cron作业。

让我们创建一个cron作业,以便它每周检查一次证书的过期情况,并执行续订过程并重启Nginx服务器。

# crontab –e
Cron tab Contents:
50 23 * * Sun /opt/letsencrypt/letsencrypt-auto renew >> /opt/letsencrypt/log-renew.log
59 23 * * Sun /usr/bin/systemctl reload nginx

在上面的cron中,我们每周日晚上11:50执行续订过程,并将重启nginx服务器服务,以便如果SSL证书已续订,则将其应用于我们在服务器上生成的站点或域名。

使用上述配置和设置,我们现在可以免费使用Let’s Encrypt客户端生成SSL证书,并能够续订SSL证书,从而免费保护网站或域名。

更新于:2020年1月22日

浏览量:261

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.