Введение
В статье мы расскажем, как настроить TLS/SSL-сертификат от Let's Encrypt на сервере Ubuntu 14.04 с установленным Apache в качестве веб-сервера (пишите в комментариях, если необходимо расширить статью описанием процесса установки на nginx). Сертификаты Let's Encrypt выдаются на 90 дней, поэтому в статье затронем вопрос автоматизации продления сертификата.
SSL-сертификаты используются веб-серверами для шифрования трафика между сервером и клиентом, обеспечивая дополнительную безопасность для пользователей, имеющих доступ к вашим сайтам. Let's Encrypt обеспечивает простой способ получить и установить доверенные сертификаты бесплатно.
Необходимое
Для того, чтобы выполнить все указанные в руководстве шаги, вам потребуется:
- VDS с Ubuntu 14.04 с root-пользователем (доступ к нему вы получаете в процессе инициализации сервера) или пользователя с возможностью использования sudo (его вы можете настроить самостоятельно), инструкции по настройке VDS-сервера вы найдете в этом разделе: http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358255;
- установленный и правильно настроенный для одного или нескольких хостнеймов веб-сервер Apache.
Порядок действий
Шаг 1 - Установка зависимостей
Первое, что мы сделаем, это обновим кэш менеджера пакетов, чтобы иметь доступ к последним версиям ПО:
sudo apt-get update
Для того, чтобы получить ПО Let's Encrypt, нам понадобится Git (популярная система контроля версий). Для его установки выполните следующую команду:
sudo apt-get install git
Шаг 2 - Установка клиента Let's Encrypt
На данном шаге мы скачаем клиент Let's Encrypt из официального репозитория проекта и поместим его файлы в специальной директории на сервере. Мы делаем это через Git, чтобы облегчить обновление, когда они станут доступны (поскольку клиент Let's Encrypt все еще находится в бета-версии, возможны обновления для исправления ошибок и добавления новых функциональных возможностей).
Для наших целей мы создадим папку в каталоге /opt. Это стандартный каталог для размещения программного обеспечения сторонних производителей:
mkdir /opt
Чтобы создать локальную копию клиента Let's Encrypt, выполним:
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Шаг 3 - Установка SSL-сертификата
Получить сертификат SSL для Apache с помощью Let's Encrypt очень просто. Клиент автоматически сгенерирует и установит новый сертификат SSL, который действителен для доменов, переданных в качестве параметров.
Перейдем в каталог letsencrypt:
cd /opt/letsencrypt
Чтобы выполнить интерактивную установку и получить сертификат, действительный только для одного домена, выполните команду letsencrypt-auto со следующими параметрами:
./letsencrypt-auto --apache -d example.com
Если вы хотите установить один сертификат, действительный для нескольких доменов или субдоменов (это может понадобиться в случае, если вы разместили на VDS несколько сайтов, при этом используете один и тот же IP-адрес, добавить который вы можете, следуя этой инструкции: http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358224; или если ваш сайт доступен и с префиксом www и без него), вы можете передать их в качестве дополнительных параметров команды. Первое передаваемое доменное имя будет использоваться Let's Encrypt в качестве базового, по этой причине мы рекомендуем передать первым доменное имя верхнего уровня, а затем список любых дополнительных поддоменов или псевдонимов:
./letsencrypt-auto --apache -d example.com -d www.example.com
В этом примере базовым доменом будет example.com.
После того, как будут установлены все необходимые зависимости, вам будет представлена возможность шаг за шагом настроить параметры сертификата. Первое, что будет необходимо указать, это адрес электронной почты который понадобится в случае потери секретного ключа сертификата, далее вам предложат выбрать между включением и HTTP, и HTTPS или перенаправлением всех запросов на HTTPS.
Когда установка будет завершена, новые файлы сертификатов будут доступны в директории /etc/letsencrypt/live. Статус вашего сертификата SSL вы сможете проверить по следующей ссылке (не забудьте заменить example.com на ваш базовый домен для сертификата): https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
Теперь у вас должна быть возможность зайти на ваш сайт с использованием HTTPS (https://example.com).
Шаг 4 - Настройка автопродления
Сертификаты Let's Encrypt действительны в течение 90 дней, но мы рекомендуем продлевать срок действия сертификатов каждые 60 дней, чтобы исключить возможные ошибки.
Чтобы в автоматическом режиме обновить все установленные сертификаты, необходимо использовать команду:
letsencrypt renew
Чтобы автоматизировать процесс продления, мы добавим задание в cron (прочитать, как это сделать, можно в этом разделе: https://timeweb.com/ru/support/faq/hosting/technical/kak-mozhno-zapuskat-zadachi-vypolnyat-skripty-po-raspisaniyu-na-khostinge-timeweb/). Для редактирования crontab для root пользователя выполните следующую команду:
sudo crontab -e
Вставьте следующую строку:
30 2 * * 1 /opt/letsencrypt/letsencrypt renew >> /var/log/letsencrypt-renew.log
Сохраните файл и выйдите из редактора.
Это создаст новое задание, которое будет пытаться обновить сертификаты, у которых осталось менее 30 дней до истечения каждый понедельник в 2:30 утра. Вся информация, генерируемая командой, будет сохраняться в лог-файле, доступном по пути /var/log/letsencrypt-renew.log.
Шаг 5 - Обновление клиента Let's Encrypt (необязательно)
Всякий раз, когда новые обновления Let's Encrypt будут доступны, вы можете обновить локальную копию, запустив git pull в каталоге Let's Encrypt:
св /opt/letsencrypt sudo git pull
Это позволит загрузить все последние изменения клиента на ваш сервер.
Результат
В этом руководстве мы познакомились с тем, как установить бесплатный сертификат SSL от Let's Encrypt на сайт, работающий под управлением веб-сервера Apache. Поскольку клиент Let's Encrypt все еще находится в бета-версии, мы рекомендуем вам периодически знакомиться с содержимым блога Let's Encrypt (https://letsencrypt.org/blog/) на предмет важных обновлений.
Комментарии
Из под терминала автопродление работает, но с автопродлением по крону есть проблемы, похоже команду /opt/letsencrypt/letsencrypt renew нужно писать в кроне как-то по другому:
Cron Daemon выдает ошибку: su: must be run from a terminal, и в логах пишет, что нельзя применять sudo.
Есть идеи, как сделать правильно?