Как обезопасить Apache с помощью Let’s Encrypt на CentOS 7

Вступление

Let’s Encrypt - центр сертификации (CA), который предоставляет бесплатные сертификаты для https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates- private-keys-and-csrs [шифрование на транспортном уровне (TLS)], что позволяет использовать зашифрованные HTTPS на веб-серверах. Это упрощает процесс создания, проверки, подписания, установки и возобновления сертификатов, предоставляя программный клиент, который автоматизирует большинство шагов - https: //certbot.eff.org/ [Certbot].

В этом руководстве вы будете использовать Certbot для настройки сертификата TLS / SSL из Let Encrypt на сервере CentOS 7, на котором Apache работает как веб-сервер. Кроме того, вы будете автоматизировать процесс обновления сертификата, используя задание cron, о котором вы можете узнать больше, прочитав https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks- on-a-vps [Как использовать Cron для автоматизации задач на VPS].

Предпосылки

Для завершения этого руководства вам понадобится:

  • Один сервер CentOS 7 настроен по адресу https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7. Руководство по начальной настройке CentOS 7] с пользователем без полномочий root, который имеет + sudo + привилегии.

  • Базовый брандмауэр, настроенный с помощью следующих Addd рекомендуемых шагов для новых Серверы CentOS 7.

  • Apache установлен на сервере CentOS 7 с настроенным виртуальным хостом. Вы можете узнать, как это настроить, следуя нашему руководству How To Install the Веб-сервер Apache на CentOS 7. Убедитесь, что у вас есть https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-centos-7#step-4-%E2%80%94 -setting-up-virtual-hosts- (рекомендуется) [файл виртуального хоста] для вашего домена. В этом руководстве будет использоваться + / etc / httpd / sites-available / .conf + в качестве примера.

  • Вы должны владеть или контролировать зарегистрированное доменное имя, с которым вы хотите использовать сертификат. Если у вас еще нет зарегистрированного доменного имени, вы можете приобрести его на https://namecheap.com [Namecheap], получить его бесплатно на Freenom или используйте регистратор домена по вашему выбору.

  • DNS * A Record *, который указывает ваш домен на публичный IP-адрес вашего сервера. Вы можете следовать this вводная информация о DNS DigitalOcean для получения подробной информации о том, как добавить их с платформой DigitalOcean. Записи DNS A требуются из-за того, как Let’s Encrypt проверяет, принадлежит ли вам домен, для которого выдается сертификат. Например, если вы хотите получить сертификат для `, этот домен должен разрешиться на ваш сервер, чтобы процесс проверки заработал. Наша установка будет использовать ` и ++ в качестве доменных имен, оба из которых потребуют правильной записи DNS.

Когда все эти предварительные условия выполнены, перейдите к установке клиентского программного обеспечения Let Encrypt.

Шаг 1 - Установка Certbot Let’s Encrypt Client

Чтобы использовать Let’s Encrypt для получения SSL-сертификата, сначала необходимо установить Certbot и https://httpd.apache.org/docs/2.4/mod/mod_ssl.html [+ mod_ssl +], модуль Apache, который обеспечивает поддержку для SSL v3 шифрование.

Пакет + certbot + по умолчанию недоступен через менеджер пакетов. Вам нужно будет включить EPEL репозиторий для установки Certbot.

Чтобы добавить репозиторий CentOS 7 EPEL, выполните следующую команду:

sudo yum install epel-release

Теперь, когда у вас есть доступ к хранилищу, установите все необходимые пакеты:

sudo yum install certbot python2-certbot-apache mod_ssl

В процессе установки вам будет предложено импортировать ключ GPG. Этот ключ будет проверять подлинность устанавливаемого вами пакета. Чтобы завершить установку, примите ключ GPG, набрав + y + и нажав + ENTER +, когда будет предложено сделать это.

Установив эти службы, вы теперь готовы запустить Certbot и получить свои сертификаты.

Шаг 2 - Получение сертификата

Теперь, когда Certbot установлен, вы можете использовать его для запроса SSL-сертификата для вашего домена.

Использование клиента + certbot + Let Encrypt для генерации SSL-сертификата для Apache позволяет автоматизировать многие этапы процесса. Клиент автоматически получит и установит новый сертификат SSL, действительный для доменов, которые вы указали в качестве параметров.

Чтобы выполнить интерактивную установку и получить сертификат, охватывающий только один домен, выполните команду + certbot + с помощью:

sudo certbot --apache -d

Он запускает + certbot + с плагином + - apache + и указывает домен, для которого нужно настроить сертификат, с флагом + -d +.

Если вы хотите установить один сертификат, действительный для нескольких доменов или поддоменов, вы можете передать их в качестве дополнительных параметров команде, пометив каждый новый домен или поддомен флагом + -d +. Первым доменным именем в списке параметров будет домен * base *, используемый Let Encrypt для создания сертификата. По этой причине передайте имя базового домена первым в списке, а затем дополнительные субдомены или псевдонимы:

sudo certbot --apache -d  -d

Базовым доменом в этом примере является + example.com +.

Утилита + certbot + также может запрашивать информацию о домене во время процедуры запроса сертификата. Чтобы использовать эту функцию, вызовите + certbot + без каких-либо доменов:

sudo certbot --apache

Программа предоставит вам пошаговое руководство по настройке параметров вашего сертификата. Он попросит вас указать адрес электронной почты для восстановления потерянного ключа и уведомления, а затем предложит вам согласиться с условиями обслуживания. Если вы не указали свои домены в командной строке, вам также будет предложено это сделать. Если в файлах вашего виртуального хоста не указан домен, который они обслуживают явно, с помощью директивы + ServerName +, вам будет предложено выбрать файл виртуального хоста. В большинстве случаев файл по умолчанию + ssl.conf будет работать.

Вы также сможете выбирать между разрешением доступа + http + и + https + или принудительным перенаправлением всех запросов на + https +. Для большей безопасности рекомендуется выбрать опцию +2: Redirect +, если у вас нет особой необходимости разрешать незашифрованные соединения. Выберите ваш выбор, затем нажмите + ENTER.

OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Когда установка будет успешно завершена, вы увидите сообщение, похожее на это:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live//fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live//privkey.pem
  Your cert will expire on . To obtain a new or tweaked
  version of this certificate in the future, simply run certbot again
  with the "certonly" option. 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

Сгенерированные файлы сертификатов будут доступны в подкаталоге, названном в честь вашего базового домена в каталоге + / etc / letsencrypt / live +.

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

Шаг 3 - Проверка статуса вашего сертификата

На этом этапе вы можете убедиться, что Certbot правильно создал ваш SSL-сертификат, используя SSL Server Test от компании по облачной безопасности https://www.qualys.com/ [ Qualys].

Откройте следующую ссылку в предпочитаемом вами веб-браузере, заменив ++ доменом * base *:

https://www.ssllabs.com/ssltest/analyze.html?d=

Вы попадете на страницу, которая немедленно начинает тестирование SSL-соединения с вашим сервером:

изображение: https: //assets.digitalocean.com/articles/LE_CentOS7_66505/SSL_Server_Test.png [Тест SSL-сервера]

После запуска теста может пройти несколько минут. Статус теста будет обновлен в вашем браузере.

Когда тестирование завершится, на странице отобразится буквенная оценка, которая оценивает безопасность и качество конфигурации вашего сервера. На момент написания этой статьи настройки по умолчанию дают оценку * A *:

изображение: https: //assets.digitalocean.com/articles/LE_CentOS7_66505/SSL_Report_A.png [Отчет SSL - A]

Для получения дополнительной информации о том, как SSL Labs определяет эти оценки, ознакомьтесь с SSL Labs Grading post подробными обновлениями, внесенными в оценку схема на январь 2018 года.

Попробуйте перезагрузить ваш сайт с помощью + https: // + и обратите внимание на индикатор безопасности вашего браузера. Теперь это будет означать, что сайт защищен должным образом, обычно с зеленым значком замка.

После того, как ваш SSL-сертификат настроен и проверен, следующим шагом будет настройка автоматического продления для вашего сертификата, чтобы сохранить ваш сертификат действительным.

Шаг 4 - Настройка автоматического продления

Сертификаты Let Encrypt действительны в течение 90 дней, но рекомендуется обновлять сертификаты каждые 60 дней, чтобы допускать погрешность. Поэтому рекомендуется автоматизировать этот процесс, чтобы периодически проверять и обновлять сертификат.

Сначала давайте рассмотрим команду, которую вы будете использовать для обновления сертификата. Клиент + certbot + Let’s Encrypt имеет команду + renew +, которая автоматически проверяет установленные сертификаты и пытается обновить их, если срок их действия истек менее чем через 30 дней. Используя опцию + - dry-run +, вы можете запустить симуляцию этой задачи, чтобы проверить, как работает + renew +:

sudo certbot renew --dry-run

Вывод должен выглядеть примерно так:

OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for
http-01 challenge for
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-staging-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of apache server; fullchain is
/etc/letsencrypt/live//fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
 /etc/letsencrypt/live//fullchain.pem (success)
...

Обратите внимание, что если вы создали связанный сертификат с несколькими доменами, в выходных данных будет отображаться только имя базового домена, но продление будет действительным для всех доменов, включенных в этот сертификат.

Практический способ гарантировать, что ваши сертификаты не устареют, - это создать cron задание, которое будет периодически выполнять команду автоматического обновления для вас. Поскольку продление сначала проверяет дату истечения срока действия и выполняет продление только в том случае, если срок действия сертификата составляет менее 30 дней, можно создать задание cron, которое будет запускаться каждую неделю или даже каждый день.

В official Certbot документации рекомендуется запускать + cron + два раза в день. Это гарантирует, что в случае, если Let Encrypt инициирует отзыв сертификата, у Certbot не будет продления вашего сертификата не более чем на полдня.

Отредактируйте + crontab +, чтобы создать новую работу, которая будет запускать обновление два раза в день. Чтобы отредактировать + crontab + для пользователя * root *, выполните:

sudo crontab -e

Ваш текстовый редактор откроет по умолчанию + crontab +, который на данный момент является пустым текстовым файлом. Этот урок будет использовать текстовый редактор vi. Чтобы узнать больше об этом текстовом редакторе и его преемнике vim, посмотрите наш https://www.digitalocean.com/community/tutorials/install-and-using-the-vim-text-editor-on-a-cloud-server руководство по установке и использованию текстового редактора Vim на облачном сервере.

Войдите в режим вставки, нажав + i +, и добавьте следующую строку:

crontab0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

Когда вы закончите, нажмите + ESC +, чтобы выйти из режима вставки, затем +: wq + и + ENTER +, чтобы сохранить и выйти из файла. Это создаст новое задание cron, которое будет выполняться каждый день в полдень и полночь. Добавление элемента случайности в ваши задания cron гарантирует, что ежечасные задания не будут выполняться в одну и ту же минуту, вызывая скачок сервера; `+ python -c 'import random; время импорта; time.sleep (random.random () * 3600) '+ `выберет случайную минуту в течение часа для ваших задач обновления.

Для получения дополнительной информации о том, как создавать и планировать задания cron, вы можете проверить наши https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-on-a-vps [ Как использовать Cron для автоматизации задач в VPS]. Более подробную информацию об обновлении можно найти в документации Certbot.

Заключение

В этом руководстве вы установили клиент Let Encrypt Certbot, загрузили SSL-сертификаты для своего домена и настроили автоматическое продление сертификатов. Если у вас есть какие-либо вопросы по использованию Certbot, вы можете проверить официальную документацию Certbot. Мы также рекомендуем вам время от времени проверять официальный Let’s Encrypt blog на наличие важных обновлений.

Related