Поиск по сайту:
Нет ничего нежнее переписки друзей, не желающих больше встречаться (М. Пруст).

Безопасный Apache с Let’s Encrypt на CentOS 7

10.09.2018
Безопасный Apache с Let's Encrypt на CentOS 7

Let’s Encrypt – бесплатный, автоматизированный и открытый центр сертификации, разработанный Исследовательской группой Internet Security Research Group (ISRG). Сертификаты, выданные Let’s Encrypt, действительны в течение 90 дней с даты выпуска, и сегодня им доверяют почти все браузеры.

В этой статье мы рассмотрим шаги, необходимые для установки бесплатного SSL-сертификата для шифрования SSL на сервере CentOS 7 с Apache в качестве веб-сервера. Мы будем использовать утилиту certbot для получения и обновления сертификатов Let’s Encrypt.

Перед продолжением этой статьи, убедитесь, что вы выполнили следующие предварительные условия:

  • Укажите имя домена, указывающий на ваш IP-адрес общего сервера. В этой статье мы будем использовать домен andreyex.ru.
  • Установленный Apache и запущен на сервере.
  • Виртуальный хост Apache для своего домена.
  • Открытые порты 80 и 443 в своем брандмауэре.

Установите следующие пакеты, которые необходимы для SSL-зашифрованного веб-сервера:

yum install mod_ssl openssl

 

Certbot – это инструмент, упрощающий процесс получения SSL-сертификатов от Let’s Encrypt и автоматического включения HTTPS на вашем сервере.

Пакет certbot предоставляется EPEL. Если репозиторий EPEL не установлен в вашей системе, вы можете установить его, используя следующую команду:

sudo yum install epel-release

 

После того, как репозиторий EPEL включен, установите пакет certbot, введя:

sudo yum install certbot

 

Обмен ключами Diffie-Hellman (DH) – это метод безопасного обмена криптографическими ключами по необеспеченному каналу связи. Создайте новый набор параметров 2048 бит DH для усиления безопасности:

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

 

Вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.

Чтобы получить сертификат SSL для нашего домена, мы собираемся использовать плагин Apache, который работает, создавая временный файл для запрашиваемого домена в каталоге,${webroot-path}/.well-known/acme-challenge, а сервер проверки подлинности Let’s Encrypt делает HTTP-запросы для проверки DNS для запрашиваемого домена разрешение на сервер, на котором выполняется certbot.

Чтобы сделать его более простым, мы собираем все HTTP-запросы для .well-known/acme-challenge в одном каталоге /var/lib/letsencrypt. Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.

Следующие команды создадут каталог и сделают его доступным для записи на сервере Apache.

mkdir -p /var/lib/letsencrypt/.well-known
chgrp apache /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt

 

Чтобы избежать дублирования кода, создайте следующие два фрагмента конфигурации:

/etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
    AllowOverride None
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

 

/etc/httpd/conf.d/ssl-params.conf
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
# Требует Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Требует Apache >= 2.4.11
SSLSessionTickets Off

 

В приведенном выше фрагменте используются чипперы, рекомендованные Cipherli.st, позволяющие сшивание OCSP, строгая транспортная безопасность HTTP (HSTS) и использование нескольких HTTP-заголовков, ориентированных на безопасность.

Перезагрузите конфигурацию Apache, чтобы изменения вступили в силу:

sudo systemctl reload httpd

 

Теперь мы можем запустить средство Certbot с помощью плагина webroot и получить файлы SSL сертификатов, набрав:

sudo certbot certonly --agree-tos --email admin@andreyex.ru --webroot -w /var/lib/letsencrypt/ -d andreyex.ru -d www.andreyex.ru

 

Если сертификат SSL будет успешно получен, certbot напечатает следующее сообщение:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/andreyex.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/andreyex.ru/privkey.pem
   Your cert will expire on 2018-12-07. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 

CentOS 7 поставляется с Apache версии 2.4.6, которая не включает директиву SSLOpenSSLConfCmd. Эта директива доступна только на Apache позже 2.4.8 и используется для настройки параметров OpenSSL, таких как обмен ключами Diffie-Hellman (DH).

Нам нужно будет создать новый комбинированный файл, используя SSL-сертификат Let’s Encrypt и созданный файл DH. Для этого введите:

cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem

 

Теперь, когда все настроено, отредактируйте конфигурацию виртуального хоста домена следующим образом:

/etc/httpd/conf.d/andreyex.ru.conf
<VirtualHost *:80> 
  ServerName andreyex.ru
  ServerAlias www.andreyex.ru

  Redirect permanent / https://andreyex.ru/
</VirtualHost>

<VirtualHost *:443>
  ServerName andreyex.ru
  ServerAlias www.andreyex.ru

  <If "%{HTTP_HOST} == 'www.andreyex.ru'">
    Redirect permanent / https://andreyex.ru/
  </If>

  DocumentRoot /var/www/andreyex.ru/public_html
  ErrorLog /var/log/httpd/andreyex.ru-error.log
  CustomLog /var/log/httpd/andreyex.ru-access.log combined

  SSLEngine On
  SSLCertificateFile /etc/letsencrypt/live/andreyex.ru/cert.dh.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/andreyex.ru/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/andreyex.ru/chain.pem

  # Остальные конфигурации Apache

</VirtualHost>

 

С приведенной выше конфигурацией мы устанавливаем HTTPS и перенаправляем с www на не-www-версию. Не стесняйтесь настраивать конфигурацию в соответствии с вашими потребностями.

Перезапустите службу Apache, чтобы изменения вступили в силу:

sudo systemctl restart httpd

 

Теперь вы можете открыть свой веб-сайт, https:// и вы заметите значок зеленого замка.

Если вы протестируете свой домен с помощью теста SSL Labs Server, вы получите оценку A +, как показано ниже:

Безопасный Apache с Let's Encrypt на CentOS 7

Сертификаты Encrypt действительны в течение 90 дней. Чтобы автоматически продлить срок действия сертификатов до истечения срока их действия, мы создадим cronjob, который будет работать два раза в день и автоматически обновит сертификат за 30 дней до истечения срока его действия.

Запустите команду crontab для создания нового cronjob, который обновит сертификат, создаст новый комбинированный файл, включая ключ DH, и перезапустит apache:

sudo crontab -e

 

0 */12 * * * certbot renew --cert-name andreyex.ru --renew-hook "cat /etc/letsencrypt/live/andreyex.ru/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/andreyex.ru/cert.dh.pem && systemctl restart httpd"

 

Чтобы протестировать процесс обновления, вы можете использовать переключатель --dry-run в certbot:

sudo certbot renew --cert-name andreyex.ru --dry-run

 

Если ошибок нет, это означает, что процесс обновления был успешным.

В этой статье вы использовали клиент Let’s Encrypt, certbot для загрузки сертификатов SSL для вашего домена. Вы также создали фрагменты Apache, чтобы избежать дублирования кода и настроите Apache для использования сертификатов. В конце статьи вы создали cronjob для автоматического обновления сертификата.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

5 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Nekto 80

Добрый день. Отличная статья. Все кратко, четко.
У меня вопрос: ОС: CentOS 7.6.1810, руководствуюсь Вашей инструкцией, запись типа А домена вида web.domain.su сделана и резолвится, сопоставление web.domain.su и ip прописаны в hosts, веб-сервер запущен и настроен, порты 80 и 443 открыты.
При этом формируется самоподписной сертификат. Необходим сертификат, подписанный Let’s Encrypt Authority X3.
Куда посмотреть?

Диман

При попытке обновить, все делал по вашей инструкции получаю ошибку, похоже не работает. centos последний
sudo certbot renew –cert-name my.domen –dry-run

Attempting to renew cert (my.domen) from /etc/letsencrypt/renewal/my.domen.conf produced an unexpected error: Missing command line flag or config entry for this setting:
Select the webroot for my.domen:
Choices: [‘Enter a new webroot’, ‘/var/lib/letsencrypt’]

(You can set this with the –webroot-path flag). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/my.domen/fullchain.pem (failure)

Евгений

кто разобрался, почему самоподписанный сертификат получается?

oleg71106

Сделал по статье все прошло четко, только при тесте сертификата получил не А оценку, а B.

Андрей

Спасибо огромное, ваша инструкция идеальна.

Я перепробовал сотни способов, но не работало.

Читайте также

Спасибо!

Теперь редакторы в курсе.