Сертификаты Let’s Encrypt
Let’s Encrypt — удостоверяющий центр, который предоставляет бесплатные SSL/TLS-сертификаты.
Модуль Let’s Encrypt в ispmanager автоматизирует запрос, проверку, выпуск, установку и обновление сертификатов.
В этой статье описан выпуск сертификата для основного домена. Подробнее о выпуске сертификата для почтового сервера и почтового домена — в статье SSL-сертификаты для почты.
Ограничения Let’s Encrypt
- Доступно до 50 сертификатов в неделю для каждого домена
- Срок действия сертификата Let’s Encrypt — 3 месяца
- Let’s Encrypt выпускает только сертификаты с проверкой владения доменом (DV-сертификаты)
Подробнее об ограничениях — в официальной документации Let's Encrypt.
Требования Let’s Encrypt
Для выпуска сертификата у пользователя должны быть:
- доступ к SSL
- действующее доменное имя, доступное для мировых DNS
- одноименный сайт или домен в панели ispmanager
Выпуск сертификата Let’s Encrypt
- В ispmanager генерируется запрос на выпуск сертификата и отправляется в Let’s Encrypt.
- Let’s Encrypt проверяет, что заказчик сертификата владеет доменом или имеет над ним контроль.
- Let’s Encrypt выпускает сертификат.
- Ispmanager устанавливает сертификат на сайт.
Запрос сертификата
В ispmanager выпуск сертификата Let's Encrypt доступен двумя способами — при создании/редактировании сайта и из раздела SSL-сертификаты.
- Авторизуйтесь в панели ispmanager.
- Перейдите в раздел Сайты.
- Нажмите Создать сайт или выберите существующий и нажмите
.
- В поле SSL-сертификат выберите вариант Новый бесплатный от Let's Encrypt.
- Установите галочку Перенаправлять HTTP-запросы в HTTPS, чтобы все запросы к сайту выполнялись по защищенному соединению.
- Сохраните изменения. В открывшейся форме заполните поля:
Wildcard-сертификат (необязательно) — установите галочку, чтобы сертификат распространялся на сам домен и все его поддомены первого уровня
При выпуске Wildcard-сертификата проверка владения доменом принудительно выполняется по DNS.
- Проверка через DNS (необязательно) — установите галочку, чтобы проверка владения доменом выполнялась через DNS (если не отмечена проверка через DNS, используется проверка по HTTP)
- Доменное имя — укажите все доменные имена, для которых будет выпущен сертификат (можно указать альтернативные имена для текущего домена или до 99 дополнительных доменных имен)
- Почтовый ящик — электронный адрес владельца сертификата
- Длина ключа — 2048 или 4096 бит
- Нажмите Выпустить.
- Если для сертификата была выбрана проверка по DNS и в качестве сервера имен используется внешний NS-сервер, добавьте TXT-записи для проверки в DNS-зону домена.
После выпуска сертификат активируется для сайта автоматически.
- Авторизуйтесь в панели ispmanager.
- Перейдите в раздел SSL-сертификаты.
- В списке Добавить сертификат выберите Let's Encrypt.
- В открывшейся форме заполните поля:
- Включить SSL-сертификат — установите галочку, чтобы сертификат автоматически активировался для сайта (доступно, если в панели для домена создан сайт)
- Включить SSL-сертификат для почтового домена — установите галочку, чтобы сертификат автоматически активировался для одноименного почтового домена (доступно, если в панели создан одноименный почтовый домен)
Wildcard-сертификат (необязательно) — установите галочку, чтобы сертификат распространялся на все поддомены первого уровня текущего домена
При выпуске Wildcard-сертификата проверка владения доменом принудительно выполняется по DNS.
- Проверка через DNS (необязательно) — установите галочку, чтобы проверка владения доменом выполнялась через DNS (если не отмечена проверка через DNS, используется проверка по HTTP)
- Имя пользователя — выберите пользователя, которому принадлежит домен (доступно при выпуске сертификата под учетной записью уровня реселлер и выше)
- Имя SSL-сертификата — оставьте без изменений или укажите свое
- Домен — выберите основной домен, для которого будет выпущен сертификат
- Доменное имя — укажите все доменные имена, для которых будет выпущен сертификат (можно указать альтернативные имена для текущего домена или до 99 дополнительных доменных имен)
- Почтовый ящик — электронный адрес владельца сертификата
- Длина ключа — 2048 или 4096 бит
- Нажмите Выпустить.
- Если для сертификата была выбрана проверка по DNS и в качестве сервера имен используется внешний NS-сервер, добавьте TXT-записи для проверки в DNS-зону домена.
Если при выпуске было отмечено поле Включить SSL-сертификат, сертификат активируется для сайта автоматически. В противном случае включите его вручную.
Статус выпуска сертификата можно отслеживать в журнале. Уведомления об успешном выпуске или об ошибках появятся в журнале и в разделе Уведомления в правом верхнем углу панели.
Проверка владения доменом
Чтобы выпустить сертификат, Let’s Encrypt должен проверить, что вы владеете доменом, для которого запрашиваете сертификат. Для этого используется один из двух видов проверок — HTTP-01 и DNS-01.
Проверка по HTTP используется по умолчанию, если для домена в панели создан сайт.
Let's Encrypt генерирует случайную строку (токен) и отправляет ее ispmanager. Файл с токеном автоматически добавляется на ваш сайт по пути /usr/local/mgr5/www/letsencrypt
и становится доступен по адресу http://ДОМЕННОЕ_ИМЯ/.well-known/acme-challenge/ФАЙЛ_С_ТОКЕНОМ
. Let's Encrypt проверяет доступность файла по HTTP и его содержимое, и если проверка прошла успешно, выпускает сертификат.
Файл с токеном должен быть доступен по URL без перенаправлений и ограничений.
В случае ошибки получения сертификата из-за неправильных прав доступа к файлам, невозможности создания токена или закрытого доступа:
- используйте DNS-проверку
- подождите, пока сервер Let’s Encrypt путем перебора не найдет подходящие IP-адреса для HTTP-проверки (если у сайта несколько IP-адресов) или
- исправьте ошибки и дождитесь повторной проверки
Чтобы запустить повторную проверку сразу, в разделе SSL-сертификаты перейдите в Журнал на панели инструментов и нажмите Возобновить.
Проверка через DNS выполняется принудительно:
- при выпуске Wildcard-сертификата
- когда для домена в панели не создан сайт
- при выпуске сертификата для почтового домена
Let's Encrypt генерирует TXT-записи и отправляет их ispmanager. Записи размещаются в DNS-зоне домена, после чего ispmanager и Let's Encrypt проверяют их доступность и, если проверка прошла успешно, выпускается сертификат.
Если в качестве сервера имен используется ispmanager, TXT-записи будут добавлены в DNS-зону домена и реплицированы на ведомые серверы (при наличии) автоматически. Для просмотра:
- Перейдите в раздел Управление DNS.
- На открывшейся форме выберите сайт и нажмите кнопку DNS-записи — должны появиться TXT-записи с названиями
_acme-challenge.ВАШ_ДОМЕН
. После успешного выпуска сертификата TXT-записи удаляются.
Если используются внешние DNS-серверы, TXT-записи для каждого указанного домена нужно добавить вручную в личном кабинете регистратора доменных имен.
- Войдите в личный кабинет регистратора вашего доменного имени.
- Перейдите к ресурсным записям DNS-зоны и добавьте TXT-запись:
- Укажите поддомен вида
_acme-challenge.ВАШ_ДОМЕН
- Скопируйте TXT-запись из уведомления в ispmanager, кликнув на значок
:
- напротив сертификата в разделе SSL-сертификаты
- в Журнале на панели инструментов в разделе SSL-сертификаты либо
- напротив сайта в разделе Сайты
- Укажите поддомен вида
- Если для домена указаны альтернативные имена или дополнительные домены, добавьте TXT-записи и для них.
Чтобы запустить повторную проверку сразу после добавления TXT-записей, в разделе SSL-сертификаты перейдите в Журнал на панели инструментов и нажмите Возобновить.
Включение сертификата Let's Encrypt
- Перейдите в раздел Сайты.
- Выберите сайт, для которого нужно включить сертификат.
- В поле SSL-сертификат выберите нужный сертификат из списка.
- Сохраните изменения.
Для проверки активации сертификата откройте сайт в браузере — слева от адресной строки должен появиться знак замочка.
Журнал Let’s Encrypt
Чтобы просмотреть журнал событий для запрошенных и действующих сертификатов Let's Encrypt, в разделе SSL-сертификаты нажмите Журнал на панели инструментов. Доступен просмотр полного журнала и записей для последней попытки выпуска сертификата.
Записи, которым больше 180 дней, удаляются при обновлении сертификата.
Чтобы изменить срок хранения журнала, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
параметр LetsencryptLogPeriod с количеством дней.
Логирование Let’s Encrypt
/usr/local/mgr5/var/letsencrypt.log
— содержит отладочную информацию, URL сервера, к которому происходит обращение при выпуске сертификата, и информацию об ошибках при выпуске/usr/local/mgr5/var/ispmgr.log
— содержит результаты обращений к ACME-клиенту при выпуске, установке и обновлении сертификата
Изменить уровень логирования можно в разделе Настройка логирования (модули sslcert, rpc, core_module).
Обновление сертификата Let’s Encrypt
Проверка необходимости обновления сертификатов Let’s Encrypt выполняется каждый день по заданию cron /usr/local/mgr5/sbin/cron-ispmgr sbin/mgrctl -m ispmgr letsencrypt.check.update
.
Автообновление
Попытки перевыпуска сертификата по умолчанию начинаются за 29 дней до истечения срока его действия.
Чтобы изменить этот период, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
параметр LetsencryptStartUpdatePeriod с количеством дней. Не рекомендуется указывать значения меньше 7 и больше 29, а также отрицательные значения и буквы.
Если сертификат не удалось обновить сразу, повторные попытки будут предприниматься вплоть до конца срока его действия. Уведомления об ошибках при обновлении начнут отправляться на вторые сутки и будут отправляться каждый день.
Обновление вручную
Обновление сертификата можно выполнить вручную с помощью команды:
/usr/local/mgr5/sbin/mgrctl -m ispmgr letsencrypt.check.update force_update=yes cert_name=ИМЯ_СЕРТИФИКАТА user_name=ИМЯ_ПОЛЬЗОВАТЕЛЯ
При обновлении сертификата с проверкой по DNS TXT-записи для проверки будут сгенерированы заново. Если вы используете внешний DNS-сервер, добавьте новые записи в DNS-зону домена.
Технические подробности для сертификатов Let’s Encrypt
Серверы для выпуска сертификата
При DNS-проверке сертификат сразу выпускается на основном ACME-сервере. При HTTP-проверке — сначала в тестовом окружении и только потом — на основном сервере. По умолчанию используются основной и тестовый серверы Let’s Encrypt.
Чтобы использовать серверы другого сертифицирующего центра, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
параметры LetsencryptAcmeUrl для основного и LetsencryptAcmeStagingUrl для тестового серверов с нужными значениями.
При изменении URL ACME-сервера возможны ошибки авторизации на сервере Let's Encrypt. В таком случае существующие и выпускающиеся сертификаты потребуется выпустить заново.
Сначала создается самоподписанный сертификат, который затем заменяется на сертификат Let's Encrypt.
Количество выпускаемых сертификатов
По умолчанию одновременно может выпускаться максимум один сертификат. Запросы на новые сертификаты имеют более высокий приоритет, чем повторные попытки получения старых.
Чтобы изменить количество одновременно выпускаемых сертификатов, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
параметр LetsencryptProcessCount с нужным количеством.
Аккаунт Let's Encrypt
Аккаунт в Let's Encrypt создается при подключении к серверу Let's Encrypt. Информация об аккаунте записывается в файлы /usr/local/mgr5/tmp/le_account
и /usr/local/mgr5/tmp/le_account_dry_run
. Для выпуска всех сертификатов на сервере ispmanager используется один аккаунт Let's Encrypt.
Попытки выпуска сертификата
Первая попытка выпуска сертификата предпринимается сразу после нажатия кнопки Выпустить в форме заказа сертификата. Если сертификат не выпустился с первой попытки, вторая попытка предпринимается через 5 минут, третья — через 10, четвертая — через 20 и т.д. экспоненциально в течение суток.
Прежде чем начать выпуск сертификата ispmanager проверяет наличие серверов имен у домена. Если серверы имен отсутствуют, в журнале сертификата появится запись «Не удалось определить серверы имен для домена ВАШ_ДОМЕН». Повторные попытки предпринимаются на протяжении 24 часов. Если серверы не появятся, попытки прекратятся и заказ на получение сертификата не будет сформирован.
Если проверка серверов имен прошла успешно, первая попытка выпуска сертификата предпринимается после того, как в разделе Управление DNS для домена добавляются TXT-записи, и продолжается 10 секунд. Это позволяет выпустить сертификат сразу, если серверами имен домена управляет сам ispmanager. Если сертификат не выпустился с первой попытки, вторая попытка предпринимается через 5 минут, третья — через 10, четвертая — через 20 и т.д. экспоненциально, пока интервал не достигнет 24 часов. Попытки выпуска предпринимаются в течение всего срока жизни заказа. Срок жизни зависит от сервера, который выпускает сертификат, и обычно составляет около недели.
Необходимость повторных попыток выпуска сертификата проверяется с помощью периодического задания с интервалом по умолчанию в 1 минуту.
Чтобы изменить значение интервала, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
параметр LetsencryptProcessPeriod с количеством минут между проверками.
Чтобы запустить повторную проверку вручную, выполните команду:
/usr/local/mgr5/sbin/mgrctl -m ispmgr letsencrypt.periodic
Проверка TXT-записей
При выпуске сертификата с проверкой по DNS панель ispmanager сама проверяет наличие TXT-записей до их проверки Let's Encrypt. Это позволяет избежать превышения ограничений Let's Encrypt на количество запросов сертификата в случае ошибок. Ispmanager проверяетTXT-записи с помощью оптимизированного итеративного обхода серверов.
- Определяется публичный суффикс домена (ru, com, net.ru, com.ru и т.д.). Список таких суффиксов формируется на основе официального списка Public Suffix List (PSL), сохраняется в кеше
/usr/local/mgr5/tmp/le_suffixes.cache
и обновляется по мере необходимости, но не чаще раза в неделю. Если список получить не удается, обход начинается с серверов имен, отвечающих за домены верхнего уровня. Для суффикса запрашиваются NS-записи у одного из кеширующих серверов (по умолчанию 8.8.8.8, 8.8.4.4, 77.88.8.8, 77.88.8.1, 1.1.1.1).
ПодробнееЧтобы их изменить, добавьте в конфигурационный файл панели
/usr/local/mgr5/etc/ispmgr.conf
параметр LetsencryptAcmeDigNS с нужными IP-адресами. Каждое значение должно начинаться с символа «@». Значение параметра можно оставить пустым, чтобы использовались настройки DNS-резолвинга сервера.- Для полученных серверов имен с того же кеширующего сервера запрашивается IP-адрес.
- По полученному IP-адресу запрашивается TXT-запись домена, для которого выпускается сертификат.
- Если сервер имен не содержит TXT-записи, повторяются пункты 2–4, пока не будут найдены авторитативные серверы домена.
- У авторитативных серверов имен запрашиваются TXT-записи для проверки.
- Авторитативные серверы имен, их адреса и время ответа сохраняются в файлах кеша
/usr/local/mgr5/tmp/le_ns.cache
,/usr/local/mgr5/tmp/le_ip.cache
и/usr/local/mgr5/tmp/le_balancer.cache
соответственно. При последующих проверках TXT-записи запрашиваются напрямую у самого «быстрого» закешированного авторитативного сервера.
Такой принцип опроса серверов позволяет избежать:
- Задержек в связи с медленной работой корневых серверов за счет их пропуска
- Получения устаревших TXT-записей с кеширующих серверов — за счет запроса записей напрямую у авторитативных серверов
Чтобы отключить итеративный обход серверов, добавьте в конфигурационный файл панели /usr/local/mgr5/etc/ispmgr.conf
опцию Option LetsencryptDisableIterativeDig. В таком случае TXT-записи будут запрашиваться сразу с кеширующих серверов (8.8.8.8 8 и т.д.).
Обработка ошибок сервера Let's Encrypt
При некоторых ошибках от сервера Let's Encrypt попытки получение сертификата автоматически повторяются:
- некорректный nonce (одноразовый код, cгенерированный Let's Encrypt, которым клиент должен подписать запрос на сертификат) — выполняется еще две попытки выпуска без ожидания между ними: одна со старым nonce, и в случае неудачи вторая — с новым nonce
- ошибки сервера 5XX — повторные попытки выпуска сертификата предпринимаются через присланный в заголовке Retry-After промежуток времени, либо через секунду, если Retry-After отсутствует. Если суммарное ожидание от начала запросов превысило 80 секунд, в панели появится уведомление об ошибке. Следующая попытка будет предпринята через стандартный промежуток времени или промежуток Retry-After, в зависимости от того, какой промежуток дольше.
превышено ограничение Let's Encrypt — если возникла одна из следующих ошибок, и время ожидания превысило 80 секунд, будет предпринята попытка зарегистрировать новый аккаунт и снова оформить заказ (максимум 2 попытки):
- превышено число активных авторизаций
- превышено число неуспешных авторизаций
- превышено число новых заказов
При остальных ошибках превышения ограничений Let's Encrypt выполняются те же действия, что и при ошибках сервера 5XX.
Если ошибка возникла при подключении к тестовому серверу Let's Encrypt, проверка в тестовом окружении пропускается.