Данное руководство поможет настроить TLS/SSL сертификат Let’s Encrypt для Apache на сервере Ubuntu 16.04 и автоматизировать его обновление.
SSL-сертификаты необходимы веб-серверам для шифрования трафика между сервером и клиентом, что повышает безопасность данных пользователей и приложения. Сервис Let’s Encrypt позволяет быстро и просто получить такой сертификат.
Требования
- Предварительно настроенный сервер Ubuntu 16.04 (инструкции по настройке – в этой статье).
- Не-root пользователь с доступом к sudo.
- Установленный сервер Apache.
- Доменное имя.
1: Установка зависимостей
Обновите индекс пакетов:
sudo apt-get update
Установите git, чтобы загрузить пакет Let’s Encrypt:
sudo apt-get install git
Примечание: Чтобы узнать, что такое git, прочтите эту статью.
2: Загрузку клиента Let’s Encrypt
Теперь нужно загрузить клиент Let’s Encrypt из официального репозитория и поместить полученные файлы в специально отведённое место на сервере (это упростит обновление сертификата).
Примечание: На момент написания статьи клиент Let’s Encrypt все еще находится в бета-версии; следите за обновлениями клиента, чтобы устранить ошибки и внедрить новые функции.
Клонируйте репозиторий Let’s Encrypt в каталог /opt. Это стандартный каталог для хранения сторонних программ в системах Unix.
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Команда создаст локальную копию официального репозитория Let’s Encrypt в каталоге /opt/letsencrypt.
3: Создание SSL-сертификата
Сгенерируйте SSL-сертификат для Apache при помощи загруженного клиента Let’s Encrypt. Это довольно просто. Клиент автоматически получит и установит сертификат SSL, валидный для доменов, указанных в качестве параметров.
Откройте каталог letsencrypt
cd /opt/letsencrypt
Чтобы запустить интерактивную установку и получить сертификат для одного домена, запустите следующую команду:
./letsencrypt-auto --apache -d example.com
Примечание: Условный домен example.com нужно заменить своим доменным именем.
Чтобы получить один сертификат для нескольких доменов или поддоменов, передайте их в качестве дополнительных параметров. Первый домен, указанный в команде, будет считаться базовым (потому поддомены рекомендуется указывать в конце):
./letsencrypt-auto --apache -d example.com -d www.example.com
Клиент предоставит пошаговые инструкции по настройке сертификата. Программа предложит указать адрес электронной почты (на случай если ключ будет утерян).
Также можно включить доступ http и https или настроить переадресацию всех запросов на https.
Примечание: Переадресация трафика на https рекомендуется в большинстве случаев.
После завершения установки сертификат будет помещен в /etc/letsencrypt/live. Проверьте состояние SSL-сертификата:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
Примечание: Замените example.com своим доменом.
Вы получите доступ к сайту по https.
4: Автоматическое обновление
Сертификаты Let’s Encrypt действительны в течение 90 дней, но обновление рекомендуется выполнять заранее (например, через 60 дней использования сертификата). Клиент Let’s Encrypt предоставляет команду renew, которая проверяет текущий сертификат и обновляет его, если до даты его истечения остаётся меньше 30 дней.
Чтобы настроить обновление для всех существующих доменов, запустите:
./letsencrypt-auto renew
Поскольку сертификат был получен только что, команда не станет обновлять его. Она просто сообщит, что данный сертификат пока что не нуждается в обновлении.
Checking for new version...
Requesting root privileges to run letsencrypt...
/home/brennen/.local/share/letsencrypt/bin/letsencrypt renew
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.com.conf
-------------------------------------------------------------------------------
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Обратите внимание: если вы создали один сертификат для нескольких доменов, в выводе команды будет указан только базовый домен, однако обновление будет действительно для всех доменов и поддоменов.
Чтобы обеспечить своевременное обновление сертификата, настройте демон cron для автоматического запуска команды renew раз в неделю или каждый день.
Отредактируйте crontab и создайте новую запись для команды renew. Чтобы отредактировать crontab пользователя root, введите:
sudo crontab -e
Команда предложит выбрать редактор:
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
Чтобы принять редактор по умолчанию (nano), нажмите Enter.
Добавьте в конец таблицы следующую запись:
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
Сохраните и закройте файл. Это создаст новый процесс cron, который будет выполнять команду letsencrypt-auto renew каждый понедельник в 2.3о ночи. Вывод этой команды будет помещён в /var/log/le-renewal.log.
Примечание: Больше информации о cron можно найти в руководстве «Автоматизация задач с помощью Cron».
5: Обновление клиента Let’s Encrypt (опционально)
Чтобы обновить локальную копию клиента, запустите команду git pull в каталоге Let’s Encrypt.
cd /opt/letsencrypt
sudo git pull
Заключение
Теперь веб-сервер защищён при помощи бесплатного SSL-сертификата Let’s Encrypt. Напоминаем, что на данный момент клиент всё ещё находится в бета-версии, потому рекомендуется регулярно проверять официальный блог Let’s Encrypt на наличие обновлений.