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

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


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

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

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

Тестирование образца среды

Установите Lets Encrypt для Apache на CentOS и RHEL

Требования

  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 

Создать SSL-сертификат Let's Encrypt для Apache

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

Добавить адрес электронной почты для Lets Encrypt

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

Согласен с лицензией Lets Encrypt

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

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

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

Директива Active VirtualHost и выбор Mod_SSL

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

Разрешить простые HTTP-запросы

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

Lets Encrypt включен на домене

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

Шаг 4: Тестирование бесплатного шифрования Let’s Encrypt на домене

13. Чтобы проверить правильность SSL/TLS рукопожатия вашего домена, перейдите по приведенной ниже ссылке и протестируйте ваш сертификат на вашем домене.

https://www.ssllabs.com/ssltest/analyze.html

Проверить сертификат Lets Encrypt на домене

14. Если вы получаете серию отчетов о уязвимости вашего домена в проведенных тестах, то вам необходимо срочно исправить эти пробелы в безопасности.

Общая оценка класса C делает ваш домен очень небезопасным. Чтобы исправить эти проблемы безопасности, откройте файл конфигурации Apache SSL и внесите следующие изменения:

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

Найдите строку с инструкцией SSLProtocol и добавьте -SSLv3 в конец строки.

Исправить конфигурацию SSL для Apache

Перейдите глубже в файл, найдите и закомментируйте строку с 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

Настроить SSL-конфигурацию

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 

Проверка SSL-сертификата Lets Encrypt на сайте

Теперь вы должны получить общую оценку класса 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-контент с использованием бесплатного SSL-сертификата Let’s Encrypt.