使用Let's加密SSL证书设置HTTPS对于RHEL / CentOS 7/6上的Nginx

本文我们将指导您如何安装一个让我们加密SSL证书授权,我们将用来保护CentOS上的Nginx webserver事务

继此前我们加密一系列关于与SSL / TLS模块的ApacheNginx的网络服务器,本文中,我们将指导您如何生成和安装SSL /获得免费TLS证书从咱们加密认证机构 ,我们将使用以确保在CentOS / RHEL 7/6Fedora发行的Nginx Web服务器的HTTP事务。

如果你正在寻找安装让我们的Apache在RHEL / CentOS 7/6Fedora发行版加密 ,请按照下列本指南:

安装程序让我们加密以在RHEL,CentOS和Fedora上保护Apache

要求

  1. 已注册的域名与一个有效的DNS记录指向回服务器公网IP地址。
  2. Nginx Web服务器安装启用SSL和虚拟主机(仅适用于多个域或子域托管)。

我们的测试环境设置

设置HTTPS与允许加密在CentOS上保护Nginx

设置HTTPS与允许加密在CentOS上保护Nginx

第1步:安装Nginx Web服务器

1.在第一步,如果你没有Nginx的后台程序已经安装,请发出以下具有root权限的命令,以便从安装Nginx的网络服务器EPEL库

# yum install epel-release
# yum install nginx

第2步:下载或克隆免费让我们加密SSL证书

2.GitHub仓库克隆包安装在Linux系统上让我们的客户端加密中的最快方法。

首先,用下面的命令在系统上安装客户端的git:

# yum install git

3.混帐客户端安装完毕后,将目录更改/opt路径和拉让我们通过运行下面的命令加密软件:

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

第3步:生成一个免费让我们加密Nginx的SSL证书

4.获得免费SSL的过程/ TLS证书 的Nginx将手动通过让我们的加密插件独立完成。

此方法要求端口80必须是在让我们加密客户机验证服务器的标识,并生成证书时间免费。

所以,如果Nginx的已经在运行,停止该守护进程使用以下命令和运行ss工具来确认80端口不再在网络的使用。

# service nginx stop
# systemctl stop nginx
# ss -tln
检查监听网络端口 -

检查监听网络端口 -

5.现在是时候从咱们加密获得免费SSL证书。 移动到我们的加密安装目录下,如果你不已经存在,并运行letsencrypt-auto与certonly命令--standalone选项和-d为每个域标志或子要生成一个证书,如下面的例子建议。

# cd /opt
# ./letsencrypt-auto certonly --standalone -d your_domain.tld -d www.yourdomain.tld
获取免费网站加密SSL证书

获取免费网站加密SSL证书

6.你的机器上安装了一系列的软件包和依赖关系后,让我们来加密将提示您输入您的帐户将被用于丢失了密钥恢复或紧急通知。

Lets加密的添加电子邮件地址

为Lets Encrypt添加的电子邮件地址

7.接下来,你应该同意按Enter键的许可条款。

同意允许加密许可证

同意允许加密许可证

8.最后,如果一切顺利,因为它应该祝贺一个信息消息将您的bash终端上显示。 证书将过期时,也会显示该消息。

Letsencrypt安装完成

Letsencrypt安装完成

第4步:安装让我们在Nginx中加密SSL证书

9.现在您拥有一个免费的SSL / TLS证书 ,它的时间才能把它安装到Web服务器的Nginx您的域名使用它。

所有新的SSL证书被放置在/etc/letsencrypt/live/一个域名命名的目录下。 使用ls命令列出您的域颁发的证书文件,并识别它们。

# sudo ls /etc/letsencrypt/live/
# sudo ls -al /etc/letsencrypt/live/your_domain.tld
Letsencrypt SSL证书

Letsencrypt SSL证书

10.要在Nginx的安装证书文件和启用SSL,开放/etc/nginx/nginx.conf文件进行编辑,并在最后添加以下语句从监听服务器块行。 使用下图作为指南。

# vi /etc/nginx/nginx.conf

Nginx SSL块摘录:

# SSL configuration
listen 443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/your_domain.tld/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.tld/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
在Nginx配置上启用HTTPS

在Nginx配置上启用HTTPS

替换域名字符串SSL证书来匹配自己的域名。

11.最后,重启Nginx的服务,并通过HTTPS协议访问时域https://yourdomain 页面应该平滑加载,没有任何证书错误。

# systemctl restart nginx
# service nginx restart

12.为了验证SSL / TLS证书及其直线访问以下链接:

https://www.ssllabs.com/ssltest/analyze.html 
验证允许在域上加密证书

验证允许在域上加密证书

验证域上的HTTPS SSL证书

验证域上的HTTPS SSL证书

13.如果你得到你的服务器支持弱DH密钥交换和B级的总体评价的通知,产生在/ etc / nginx的/ SSL /目录新的Diffie-Hellman密码来保护你的服务器免受僵局攻击运行以下命令。

# mkdir /etc/nginx/ssl
# cd /etc/nginx/ssl
# openssl dhparam -out dhparams.pem 4096

在这个例子中,我们使用4096位的密钥,这实际上需要很长的时间来产生,并把您的服务器和SSL握手的额外的开销。

如果没有明确的必要利用这种长度的密钥,你就不要偏执,你应该有2048位密钥的安全。

14.DH密钥已经产生,开放Nginx的配置文件,之后添加以下语句ssl_ciphers线,以增加DH密钥和上升域到一个安全级别A+级。

# vi /etc/nginx/nginx.conf

添加以下块摘录Nginx.conf:

ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_timeout 30m;
ssl_session_cache shared:SSL:10m;
ssl_buffer_size 8k;
add_header Strict-Transport-Security max-age=31536000;
添加Diffie-Hellman密码到nginx配置

添加Diffie-Hellman密码到nginx配置

15.重新启动Nginx的服务应用更改并通过清除上述链接前面的结果高速缓存重新测试你的SSL证书。

# systemctl restart nginx
# service nginx restart
在网站上验证Letsencrypt SSL证书

在网站上验证Letsencrypt SSL证书

第5步:自动更新Nginx Free允许加密SSL证书

16. 让我们加密CA发布免费的SSL / TLS证书有效期为90天。 可以使用webroot插件手动续订证书,并在过期前应用,而不必停止Web服务器,方法是执行以下命令:

# ./letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=/usr/share/nginx/html/ -d yourdomain.tld -d www.yourdomain.tld
# systemctl reload nginx
Renew允许在Nginx上加密SSL证书

Renew允许在Nginx上加密SSL证书

当运行上面的命令,确保您更换webroot-path ,以匹配您的Web服务器的根目录,由Nginx的根语句中指定。

17.为自动续订证书到期之前创建从GitHub erikaheidi在/ usr / local / bin目录/目录这个bash脚本,并添加以下内容(它略作修改,以反映Nginx的设置脚本)。

# vi /usr/local/bin/cert-renew

添加以下行cert-renew文件。

#!/bin/bash
webpath=’ /usr/share/nginx/html/’
domain=$1
le_path='/opt/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;
get_domain_list(){
certdomain=$1
config_file="$le_conf/renewal/$certdomain.conf"
if [ ! -f $config_file ] ; then
echo "[ERROR] The config file for the certificate $certdomain was not found."
exit 1;
fi
domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')
if [ "${last_char}" = "," ]; then
domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
fi
echo $domains;
}
if [ -z "$domain" ] ; then
echo "[ERROR] you must provide the domain name for the certificate renewal."
exit 1;
fi
cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"
if [ ! -f $cert_file ]; then
echo "[ERROR] certificate file not found for domain $domain."
exit 1;
fi
exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)
echo "Checking expiration date for $domain..."
if [ "$days_exp" -gt "$exp_limit" ] ; then
echo "The certificate is up to date, no need for renewal ($days_exp days left)."
exit 0;
else
echo "The certificate for $domain is about to expire soon. Starting renewal request..."
domain_list=$( get_domain_list $domain )
"$le_path"/letsencrypt-auto certonly -a webroot --agree-tos --renew-by-default --webroot-path=”$webpath” --domains "${domain_list}"
echo "Reloading Nginx..."
sudo systemctl reload nginx
echo "Renewal process finished for domain $domain"
exit 0;
fi

18.更换$webpath从脚本,以配合您Nginx的文档根目录的开头的变量。 确保脚本是可执行文件和bc计算器通过发出以下命令在系统上安装。

# chmod +x /usr/local/bin/cert-renew
# yum install bc

您可以通过发出以下命令针对您的域测试脚本:

# /usr/local/bin/cert-renew yourdomain.tld
检查域上的SSL到期日期

检查域上的SSL到期日期


19.最后,自动运行证书更新过程中,添加一个新的cron作业,每星期,为了更新到期日之前30天内,证书执行脚本。

# crontab -e

在文件底部添加以下行。

@weekly  /usr/local/bin/cert-renew your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

就这样! 现在的Nginx服务器可以在您的网站上免费SSL / TLS让我们的加密证书提供安全的网络内容。