如何在 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
测试样本环境
要求
- 具有有效
A
记录的注册域名,可指向您的服务器公共 IP 地址。 - 安装 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 内容。