如何在RHEL/CentOS 7/6上安裝Let’s Encrypt SSL憑證以保護Apache

延伸上一篇有關 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

測試樣本環境
Install Lets Encrypt for Apache on CentOS and RHEL

要求

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. 已安裝具有啟用的 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 
Create Lets Encrypt SSL Certificate for Apache

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

Add Email Address for Lets Encrypt

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

Agree Lets Encrypt License

10.CentOS/RHEL 上,默认情况下,Apache 服务器不像基于 Debian 的发行版那样将启用的主机目录与可用(未激活)主机目录分开。

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

为了激活该指令,Let’s Encrypt 将提示您选择一个虚拟主机。由于找不到任何可用的 Vhost,请选择要由 Let’s Encrypt 客户端自动修改的 ssl.conf 文件,并按下 Enter 继续。

Active VirtualHost Directive and Select Mod_SSL

11. 接下来,选择 Easy 方法进行 HTTP 请求,并按下 Enter 继续。

Allow Easy HTTP Requests

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

Lets Encrypt Enabled on Domain

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

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

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

https://www.ssllabs.com/ssltest/analyze.html
Verify Lets Encrypt Certificate on Domain

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

整體評級為C級表示您的域名非常不安全。為了解決這些安全問題,打開Apache SSL配置文件,並進行以下更改:

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

搜索具有SSLProtocol語句的行,並在該行的末尾添加-SSLv3

Fix Apache SSL Configuration

深入文件,搜索並將具有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
Configure SSL Configuration

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 
Test Lets Encrypt SSL Certificate on Website

現在您應該獲得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/