延伸上一篇有關 SSL/TLS 免費證書的 Let’s Encrypt 教程,本文將演示如何在 Let’s Encrypt 證書機構 發行的免費 SSL/TLS 證書上獲取和安裝 Apache Web 伺服器在 CentOS/RHEL 7/6 和 Fedora 發行版上。
如果您希望在 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. 通過 apache 插件,為 Apache 獲取免費的 Let’s Encrypt 證書的過程在 CentOS/RHEL 中是自動化的。
運行 Let’s Encrypt 腳本命令以獲取 SSL 證書。轉到 Let’s Encrypt 安裝目錄,位於 /usr/local/letsencrypt
,並運行 letsencrypt-auto
命令,並提供 --apache
選項以及每個您需要證書的子域的 -d
標誌。
# cd /usr/local/letsencrypt # ./letsencrypt-auto --apache -d your_domain.tld

8. 提供 Let’s Encrypt 將用於恢復您丟失的金鑰或緊急通知的電子郵件地址,並按 Enter 鍵繼續。

9. 通過按 Enter 鍵同意許可證的條款。

10. 在 CentOS/RHEL 上,默认情况下,Apache 服务器不像基于 Debian 的发行版那样将启用的主机目录与可用(未激活)主机目录分开。
此外,默认情况下禁用了虚拟主机。在 SSL 配置文件中没有指定服务器名称(ServerName)的 Apache 语句。
为了激活该指令,Let’s Encrypt 将提示您选择一个虚拟主机。由于找不到任何可用的 Vhost,请选择要由 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/