Создание сертификата Let’s Encrypt для Apache в Ubuntu 14.04

Это руководство поможет установить TLS/SSL-сертификат от Let’s Encrypt на сервер Apache в Ubuntu 14.04, а также автоматизировать обновление сертификата при помощи cron.

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

Требования

  • Предварительно настроенный сервер Ubuntu 14.04 и учётная запись не-root пользователя с доступом к sudo (инструкции по настройке можно найти здесь).
  • Предварительно установленный веб-сервер Apache.

1: Установка зависимостей

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

sudo apt-get update

Установите git; эта система нужна для загрузки клиента Let’s Encrypt.

sudo apt-get install git

2: Загрузка клиента Let’s Encrypt

Теперь нужно скачать клиент Let’s Encrypt из официального репозитория, а затем поместить файлы в специально отведённый каталог (чтобы в дальнейшем облегчить процесс обновления файлов репозитория после появления нового релиза). Имейте в виду: клиент Let’s Encrypt еще находится в бета-версии, потому, возможно, понадобится часто обновлять пакеты, чтобы исправить ошибки и получить новые функции.

Клонируйте репозиторий Let’s Encrypt в каталог /opt, предназначенный для хранения дополнительных пакетов системы.

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

На сервере появится локальная копия официального репозитория Let’s Encrypt в каталоге /opt/letsencrypt.

3: SSL-сертификат

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

Откройте каталог letsencrypt:

cd /opt/letsencrypt

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

./letsencrypt-auto --apache -d example.com

Примечание: Замените условный домен example.com своим доменным именем.

Чтобы получить один сертификат для нескольких доменов и поддоменов, укажите их как дополнительные параметры в команде. В таком случае первый домен в списке будет базовым; потому рекомендуется начинать список с самого домена, а уже затем указывать  дополнительные поддомены или псевдонимы. Например:

./letsencrypt-auto --apache -d example.com -d www.example.com

В этом примере основным доменом будет example.com. эта информация понадобится в дальнейшем для автоматизации обновлений сертификата.

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

После завершения установки сгенерированный сертификат появится в /etc/letsencrypt/live. Проверить состояние сертификата можно по следующей ссылке (вместо условного домена укажите своё базовое доменное имя):

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

4: Автоматическое обновление

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

Чтобы обновить сертификат Let’s Encrypt для Apache, отключив интерактивный режим, введите:

./letsencrypt-auto certonly --apache --renew-by-default -d example.com -d www.example.com

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

Надёжный способ обеспечить своевременное обновление сертификата – это демон cron.

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

Скрипт будет автоматически запускаться один раз в неделю. Таким образом, в случае сбоя cron у вас будет в запасе 30 дней, чтобы снова попытаться обновить сертификат.

Загрузите скрипт и сделайте его исполняемым; предварительно можно просмотреть его содержимое.

sudo curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew
sudo chmod +x /usr/local/sbin/le-renew

Скрипт le-renew использует базовый домен в качестве аргумента. Узнать, какой домен является базовым, можно в /etc/letsencrypt/live (в этом каталоге хранятся генерированные сертификаты).

Чтобы запустить скрипт вручную, введите:

sudo le-renew example.com

Поскольку текущий сертификат был создан только что, у скрипта нет необходимости обновлять его и он просто сообщит, сколько дней осталось до истечения срока действия сертификата:

Checking expiration date for example.com...
The certificate is up to date, no need for renewal (89 days left).

После этого нужно отредактировать crontab и добавить в таблицу новую команду, которая будет запущена раз в неделю.

sudo crontab -e

Затем добавьте следующую строку:

crontab
30 2 * * 1 /usr/local/sbin/le-renew example.com >> /var/log/le-renew.log

Сохраните и закройте файл. Теперь cron будет запускать команду le-renew каждый понедельник в 2:30 ночи, а вывод команды будет помещён в лог /var/log/le-renewal.log.

Примечание: Больше информации о работе cron можно получить в статье «Автоматизация задач с помощью cron».

5: Обновление клиента Let’s Encrypt (опционально)

После выхода обновлений для клиента Let’s Encrypt можно обновить локальную копию при помощи команды:

cd /opt/letsencrypt
sudo git pull

Примечание: Эту команду следует запускать из каталога Let’s Encrypt.

Команда обновит репозиторий клиента.

Заключение

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

Tags: , , ,

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