Поиск по сайту:

Как установить 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 for Apache на Debian и Ubuntu, следуйте этому руководству ниже:

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

Пример среды тестирования

Требования

  1. Зарегистрированное доменное имя с действительными записями A, указывающими на общедоступный IP-адрес вашего сервера.
  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 

8. Укажите адрес электронной почты, который будет использоваться Let’s Encrypt для восстановления утерянного ключа или для срочных уведомлений, и нажмите Ввод, чтобы продолжить.

9. Согласитесь с условиями лицензии, нажав клавишу Enter.

10. В CentOS/RHEL по умолчанию сервер Apache не использует концепцию разделения каталогов для включенных хостов от доступных (неактивных) хостов, как Debian основанное распределение.

Кроме того, виртуальный хостинг по умолчанию отключен. Оператор Apache, указывающий имя сервера (ServerName), отсутствует в файле конфигурации SSL.

Чтобы активировать эту директиву, Let’s Encrypt предложит вам выбрать виртуальный хост. Поскольку он не находит ни одного доступного Vhost, выберите файл ssl.conf, который будет автоматически изменен клиентом Let’s Encrypt, и нажмите Enter, чтобы продолжить.

11. Затем выберите метод Простой для HTTP запросов и нажмите Enter, чтобы двигаться дальше.

12. Наконец, если все прошло гладко, на экране должно появиться поздравительное сообщение. Нажмите Enter, чтобы отменить приглашение.

Вот и все! Вы успешно выдали сертификат SSL/TLS для своего домена. Теперь вы можете начать просматривать свой сайт, используя протокол HTTPS.

Шаг 4. Бесплатное тестирование Let's Encrypt Encryption на домене

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. Чтобы автоматизировать этот процесс, создайте следующий 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.