Создание SSL-сертификатов Let’s Encrypt для нескольких виртуальных хостов Apache в Ubuntu 16.04

SSL-сертификаты позволяют веб-серверам шифровать трафик между сервером и клиентом, что защищает передаваемые данные и повышает безопасность пользователей приложения. Сервис Let’s Encrypt предоставляет возможность быстро получить бесплатный доверенный сертификат.

Данное руководство поможет вам установить TLS/SSL-сертификаты Let’s Encrypt для защиты нескольких виртуальных хостов Apache и автоматизировать процесс их обновления с помощью cron.

Требования

  • Сервер Ubuntu 16.04
  • Пользователь с доступом к sudo (все необходимые инструкции можно найти здесь).
  • Предварительно установленный веб-сервер Apache (чтобы установить Apache, читайте это руководство).
  • Несколько виртуальных хостов (создать их вам поможет эта статья).

В руководстве используются условные домены example.com и test.com. вместо них вы должны указать свои доменные имена.

1: Установка клиента Let’s Encrypt

Сначала нужно установить клиент Let’s Encrypt из официального репозитория. Проект Let’s Encryp переименовал клиентский пакет в Certbot, но в репозитории Ubuntu 16.04 он по-прежнему называется letsencrypt.

Обновите индекс пакетов и установите клиент:

sudo apt-get update
sudo apt-get install python-letsencrypt-apache

Пакет letsencrypt установлен. Можно приступать к созданию сертификатов.

2: Создание сертификатов

Сгенерировать SSL-сертификат для Apache с помощью Let’s Encrypt очень просто. Клиент автоматически получает и устанавливает новый SSL-сертификат, действительный для доменных имён, указанных в параметрах.

Примечание: Let’s Encrypt позволяет связывать несколько сертификатов для разных доменных имён, однако так поступать не рекомендуется. Сертификат для каждого отдельного домена лучше создавать в индивидуальном порядке. Согласно рекомендациям сервиса, связывать можно только сертификаты доменов и их поддоменов.

Таким образом, вам нужно выполнить данный раздел несколько раз: один раз для каждого отдельного хоста.

Следующая команда принимает список доменов в качестве параметров после флага –d. Первый домен в этом списке сервис Let’s Encrypt будет использовать как базовый домен для создания сертификата. Поэтому первым в списке рекомендуется поместить домен верхнего уровня, а уже затем добавить поддомены и алиасы.

Запустите интерактивную установку сертификата для домена example.com.

sudo letsencrypt --apache -d example.com

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

После установки сгенерированные сертификаты будут помещены в /etc/letsencrypt/live. Вы можете проверить состояние SSL-сертификата по ссылке:

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

Теперь можно осуществить доступ к сайту по https.

Примечание: Выполните этот раздел для каждого отдельного виртуального хоста.

3: Автоматическое обновление сертификатов

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

Клиент Let’s Encrypt предоставляет команду renew, которая автоматически проверяет текущие сертификаты и пытается обновить их, если до конца срока их действия остаётся меньше 30 дней.

Запустить процесс обновления всех установленных сертификатов можно с помощью команды:

sudo letsencrypt renew

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

Processing /etc/letsencrypt/renewal/example.com.conf
Processing /etc/letsencrypt/renewal/test.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
/etc/letsencrypt/live/test.com/fullchain.pem (skipped)
No renewals were attempted.

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

Чтобы обеспечить своевременное автоматическое обновление сертификатов, создайте запись в cron. Инструмент cron будет периодически запускать команду обновления сертификатов. Команда renewal сначала проверяет дату истечения сертификата и запускает обновление только в том случае, если до конца срока действия остаётся меньше 30 дней; потому cron можно настроить для запуска команды раз в неделю или раз в день.

Откройте crontab:

sudo crontab -e

Возможно, вам будет предложено выбрать текстовый редактор:

no crontab for root - using an empty one
Select an editor.  To change later, run 'select-editor'.
/bin/ed
/bin/nano <---- easiest
/usr/bin/vim.basic
/usr/bin/vim.tiny
Choose 1-4 [2]:

Выберите любой удобны редактор. Теперь нужно добавить в crontab команду, которая будет проверять сертификаты раз в неделю (и при необходимости обновлять их). Добавьте в конец crontab следующую строку:

crontab
. . .
30 2 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log

Теперь cron будет запускать команду letsencrypt-auto renew каждый понедельник в 2:30 ночи. Вывод команды будет регистрироваться в /var/log/le-renewal.log.

Читайте также: Автоматизация задач с помощью Cron

Заключение

Теперь вы знаете, как создавать бесплатные сертификаты Let’s Encrypt для защиты виртуальных хостов Apache.

В блоге проекта Let’s Encrypt вы найдёте много полезных советов и информацию об обновлениях.

Tags: , , , , ,

Добавить комментарий