网站搜索

如何在 RHEL/CentOS 7/6 上安装 Let's Encrypt SSL 证书以保护 Apache


扩展上一篇有关 SSL/TLS 免费证书的 Let's Encrypt 教程,在本文中,我们将演示如何获取和安装 Let's Encrypt 证书颁发机构Apache< 颁发的免费 SSL/TLS 证书。 CentOS/RHEL 7/6 和 Fedora 发行版上的 Web 服务器。

如果您想在 Debian 和 Ubuntu 上安装 Let’s Encrypt for Apache,请按照以下指南操作:

在 Debian 和 Ubuntu 上设置 Let’s Encrypt 以保护 Apache

测试样本环境

要求

  1. 具有有效 A 记录的注册域名,可指向您的服务器公共 IP 地址。
  2. 安装 Apache 服务器并启用 SSL 模块并启用虚拟主机,以防您托管多个域或子域。

第 1 步:安装 Apache Web 服务器

1. 如果尚未安装,可以通过发出以下命令来安装 httpd 守护进程:

yum install httpd

2. 为了让 Let’s encrypt 软件能够与 Apache 配合使用,请确保通过发出以下命令安装 SSL/TLS 模块:

yum -y install mod_ssl

3.最后,使用以下命令启动 Apache 服务器:

systemctl start httpd.service          [On RHEL/CentOS 7]
service httpd start                    [On RHEL/CentOS 6]

第 2 步:安装 Let's Encrypt SSL 证书

4. 安装 Let’s Encrypt 客户端的最简单方法是在文件系统中克隆 github 存储库。要在系统上安装 git,您必须使用以下命令启用 Epel 存储库。

yum install epel-release

5. 一旦 Epel 存储库添加到您的系统中,请继续运行以下命令来安装 git 客户端:

yum install git

6. 现在,一旦安装了处理 Let's Encrypt 所需的所有依赖项,请转到 /usr/local/ 目录并开始提取 Let's Encrypt 客户端表单其官方 github 存储库使用以下命令:

cd /usr/local/
git clone https://github.com/letsencrypt/letsencrypt

第 3 步:为 Apache 获取免费的 Let’s Encrypt SSL 证书

7. 借助 apache 插件,为 CentOS/RHEL 获取免费的 Apache Let’s Encrypt 证书的过程是自动化的。

让我们运行 Let's Encrypt 脚本命令来获取 SSL 证书。从 /usr/local/letsencrypt 转到 Let's Encrypt 安装目录,并通过提供 --apache 选项和 --apache 选项运行 letsencrypt-auto 命令code>-d 标记您需要证书的每个子域。

cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld 

8. 提供 Let’s Encrypt 将使用的电子邮件地址来恢复丢失的密钥或发出紧急通知,然后按 Enter 继续。

9.按 Enter 键同意许可条款。

10.CentOS/RHEL 上,默认情况下,Apache 服务器不会像 Debian 那样使用将启用的主机与可用(非活动)主机的目录分开的概念。为主分布做。

此外,默认情况下禁用虚拟主机。指定服务器名称 (ServerName) 的 Apache 语句不存在于 SSL 配置文件中。

要激活此指令,Let’s Encrypt 将提示您选择虚拟主机。由于没有找到任何可用的 Vhost,因此选择 Let’s Encrypt 客户端要自动修改的 ssl.conf 文件,然后按 Enter 继续。

11. 接下来,为 HTTP 请求选择 Easy 方法,然后按 Enter 继续。

12.最后,如果一切顺利,屏幕上应该会显示一条祝贺消息。按Enter 释放提示。

就是这样!您已成功为您的域颁发SSL/TLS证书。现在您可以开始使用 HTTPS 协议浏览您的网站。

第 4 步:在域上免费测试 Let’s Encrypt 加密

13.为了测试您的域 SSL/TLS 握手的直接性,请访问以下链接并在您的域上测试您的证书。

https://www.ssllabs.com/ssltest/analyze.html

14.如果您在进行的测试中收到一系列有关您的域漏洞的报告,那么您需要紧急修复这些安全漏洞。

C 级的总体评级表明您的域名非常不安全。要解决这些安全问题,请打开 Apache SSL 配置文件并进行以下更改:

vi /etc/httpd/conf.d/ssl.conf

搜索包含 SSLProtocol 语句的行,并在该行末尾添加 -SSLv3

深入文件中,搜索并注释带有 SSLCipherSuite 的行,方法是在其前面放置 #,并在此行下添加以下内容:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire

15.完成上述所有更改后,保存并关闭文件,然后重新启动 Apache 守护程序以应用更改。

systemctl restart httpd.service          [On RHEL/CentOS 7]
service httpd restart                    [On RHEL/CentOS 6]

16. 现在,通过访问与上面相同的链接再次测试您的域加密状态。要执行重新测试,请点击网站上的清除缓存链接。

https://www.ssllabs.com/ssltest/analyze.html 

现在您应该获得 A 级总体评级,这意味着您的域名高度安全。

第 4 步:自动续订 Let’s Encrypt 在 Apache 上的证书

17.Let's Encrypt 软件的测试版发布的证书的过期日期为90 天。因此,为了续订 SSL 证书,您必须在到期日期之前再次执行 letsencrypt-auto 命令,并使用与获取初始证书相同的选项和标志。

下面提供了如何手动续订证书的示例。

cd /usr/local/letsencrypt
./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. 要自动执行此过程,请在 /usr/local/bin/ 目录中创建以下由 github erikaheidi 提供的 bash 脚本,其中包含以下内容。 (该脚本稍作修改以反映我们的 LetsEncrypt 安装目录)。

vi /usr/local/bin/le-renew-centos

将以下内容添加到 le-renew-centos 文件中:

!/bin/bash

domain=$1
le_path='/usr/local/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 --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19.授予脚本执行权限,安装bc包并运行脚本以对其进行测试。使用您的域名作为脚本的位置参数。发出以下命令来完成此步骤:

yum install bc
chmod +x /usr/local/bin/le-renew-centos
/usr/local/bin/le-renew-centos your_domain.tld

20. 最后,使用 Linux 调度,添加一个新的 cron 作业,以便每两个月运行一次脚本,确保您的证书在到期日期之前更新。

crontab -e

在文件底部添加以下行。


0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

就是这样!在 CentOS/RHEL 系统之上运行的 Apache 服务器现在使用免费的 Let’s Encrypt SSL 证书提供 SSL 内容。