Как установить SSL-сертификат Let’s Encrypt для защиты Apache на RHEL/CentOS 7/6

Расширение последнего руководства по Let’s Encrypt относительно бесплатных сертификатов SSL/TLS, в этой статье мы собираемся продемонстрировать, как получить и установить бесплатные сертификаты SSL/TLS, выданные Центром сертификации Let’s Encrypt для веб-сервера Apache на дистрибутивах CentOS/RHEL 7/6 и Fedora тоже.

Если вы хотите установить Let’s Encrypt для Apache на Debian и Ubuntu, следуйте этому руководству ниже:

Установка Let’s Encrypt для защиты Apache на Debian и Ubuntu

Тестирование примерной среды
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. Установленный сервер Apache с включенным модулем SSL и виртуальное хостингом, в случае, если вы хостите несколько доменов или поддоменов.

Шаг 1: Установка веб-сервера Apache

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: Установка сертификата SSL Let’s Encrypt

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: Получение бесплатного SSL-сертификата Let’s Encrypt для Apache

7. Процесс получения бесплатного сертификата Let’s Encrypt для Apache автоматизирован для CentOS/RHEL благодаря плагину apache.

Давайте запустим команду скрипта 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 отсутствует выражение Apache, которое указывает имя сервера (ServerName).

Чтобы активировать эту директиву, Let’s Encrypt предложит вам выбрать виртуальный хост. Поскольку она не находит доступного Vhost, выберите файл ssl.conf для автоматической модификации клиентом Let’s Encrypt и нажмите 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: Автоматическое продление сертификатов 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. Чтобы автоматизировать этот процесс, создайте следующий скрипт bash, предоставленный на github erikaheidi, в каталоге /usr/local/bin/ со следующим содержимым. (скрипт слегка изменен для отражения каталога установки 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

Вот и все! Ваш сервер Apache, работающий на основе системы CentOS/RHEL, теперь обслуживает контент SSL с использованием бесплатного сертификата Let’s Encrypt SSL

Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/