延伸上一篇关于SSL/TLS免费证书的Let’s Encrypt教程,本文将演示如何获取并安装由Let’s Encrypt证书颁发机构为Apache Web服务器在CentOS/RHEL 7/6和Fedora发行版上发布的免费SSL/TLS证书。
如果您想在Debian和Ubuntu上为Apache安装Let’s Encrypt,请按照以下指南进行:
设置Let’s Encrypt以保护Debian和Ubuntu上的Apache
测试样本环境

要求
- A registered domain name with valid
A
records to point back to your server public IP Address. - 已安装带有SSL模块和虚拟主机功能的Apache服务器,以防您托管多个域或子域。
步骤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/
目录,并使用以下命令从其官方 github 存储库拉取 Let’s Encrypt 客户端:
# cd /usr/local/ # git clone https://github.com/letsencrypt/letsencrypt
第 3 步:为 Apache 获取免费的 Let’s Encrypt SSL 证书
7. 为 CentOS/RHEL 自动化获取 Apache 的免费 Let’s Encrypt 证书,感谢 apache 插件。
运行 Let’s Encrypt 脚本命令以获取 SSL 证书。从 /usr/local/letsencrypt
进入 Let’s Encrypt 安装目录,并通过提供 --apache
选项和每个子域所需证书的 -d
标志来运行 letsencrypt-auto
命令。
# cd /usr/local/letsencrypt # ./letsencrypt-auto --apache -d your_domain.tld

8. 提供 Let’s Encrypt 将用于找回您丢失的密钥或紧急通知的电子邮件地址,然后按 Enter 继续。

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

10. 在 CentOS/RHEL 上,默认情况下,Apache 服务器不像基于 Debian 的发行版那样将启用主机的目录与可用(未激活)主机分开。
此外,默认情况下虚拟主机是禁用的。指定服务器名称的 Apache 语句(ServerName)在 SSL 配置文件中不存在。
要激活此指令,Let’s Encrypt 将提示您选择一个虚拟主机。因为找不到任何可用的虚拟主机,请选择要由 Let’s Encrypt 客户端自动修改的 ssl.conf
文件,然后按 Enter 继续。

11. 接下来,选择 Easy 方法用于 HTTP 请求,然后按 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:在Apache上自动更新Let’s Encrypt证书
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内容。
Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/