SSL-сертификаты

WardPane сам получает и продлевает HTTPS-сертификаты Let’s Encrypt. Как только домен направлен на сервер, через минуту-две у сайта есть сертификат; ничего не нужно запускать вручную и настраивать cron. Для панели по адресу https://<IP>:1500 выпускается сертификат на IP-адрес сервера.

Что нужно

  • Адрес электронной почты для учётной записи Let’s Encrypt. Его задаёт install.sh --email, и его можно изменить в Настройки > Сертификаты (ACME_EMAIL). Без него сертификаты не выпускаются.
  • DNS-записи домена и каждого псевдонима, указывающие на сервер: A-запись на его IPv4-адрес и, если у вас есть AAAA-записи, каждая из них на его IPv6-адрес. См. DNS.
  • Порты 80 и 443, открытые в интернет, в том числе в собственном файрволе вашего VPS-провайдера.

Как это работает

У каждого сайта один сертификат на основной домен и все псевдонимы, всего до 100 имён. Продление начинается, когда от срока действия остаётся треть, так что 90-дневный сертификат продлевается примерно за 30 дней до конца.

Перед заказом панель проверяет DNS. Имя, которое пока не указывает на сервер, пропускается и попадёт в сертификат позже, когда запись исправят. На вкладке SSL сайта видно, каких имён не хватает и по какой причине.

AAAA-записи тоже проверяются. Let’s Encrypt сначала пробует IPv6 и может взять любую AAAA-запись имени, поэтому все они должны вести на этот сервер: на PUBLIC_IPV6 или на один из глобальных IPv6-адресов сервера. Если хоть одна ведёт в другое место, имя не включается, а панель пишет причину и текущее значение PUBLIC_IPV6.

Если Let’s Encrypt не смог проверить часть псевдонимов, сертификат сразу выпускается без них, а их пробуют снова позже. Все неудачные имена заказа панель сообщает одним сообщением. Основной домен так отбросить нельзя: если он не прошёл проверку, сертификата не будет.

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

Повреждённые файлы сертификата

Если файлы сертификата сайта повреждены или не читаются, панель отдаёт самоподписанный сертификат и заказывает новый. Делает она это не чаще раза в день: если диск сбоит постоянно, новые файлы испортятся так же.

Сертификаты хранятся в /var/lib/wardpane/certs/<id>/bundle.pem. Ключ и цепочка лежат в одном файле, поэтому после сбоя питания они не окажутся от разных заказов.

Учётная запись ACME

Если Let’s Encrypt сообщает, что учётная запись ACME деактивирована, панель создаёт новый ключ учётной записи, а старый сохраняет рядом как account-*.key.old. При любом другом отказе ключ не меняется.

Staging

Для тестов можно использовать staging-среду Let’s Encrypt (тестовый режим): ACME_STAGING=true в Настройки > Сертификаты или install.sh --staging. Браузеры не доверяют staging-сертификатам. Когда вы переключаетесь обратно на рабочий режим, staging-сертификаты заменяются автоматически. Настройка применяется после перезапуска панели.

Сертификат для IP сервера

IP-адрес сервера получает собственный сертификат от Let’s Encrypt с профилем shortlived: он действует около 6 дней и продлевается примерно каждые 4 дня. Панель использует его на порту 1500, и он же отдаётся для https://<IP>. Сразу после установки, пока он не выпущен, браузер может предупреждать о самоподписанном сертификате.

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

Вкладка SSL сайта

Откройте сайт и перейдите на вкладку SSL. Карточка Сертификат показывает состояние сертификата (имена, срок действия, недостающие имена и причины) и кнопки:

  • Проверить DNS проверяет, куда указывают имена сайта, ничего не заказывая.
  • Выпустить SSL заказывает сертификат сейчас, не дожидаясь следующего автоматического запуска.
  • Auto SSL выпускает и продлевает сертификат автоматически. Включено по умолчанию.
  • Перенаправлять HTTP на HTTPS отправляет посетителей, открывших http://, на защищённый адрес. Включено по умолчанию.

Пока сертификат выпускается, страница обновляется каждые 3 секунды.

Раздел SSL-сертификатов

В версии 2.4 планируется раздел SSL-сертификаты: сертификаты всех сайтов на одной странице, включая самоподписанные, ваши собственные и CSR (см. план развития). В 2.0 сертификат каждого сайта виден на его вкладке SSL, а на странице «Главная» показано, у скольких сайтов проблемы с сертификатом. Предупреждения о скором окончании срока с кнопкой исправления появятся в 2.3 вместе с проверками состояния.

Сайты за Cloudflare

Сертификаты выпускаются, даже когда DNS сайта указывает на Cloudflare. Включите За Cloudflare на вкладке SSL. Для самого первого сертификата установите в Cloudflare режим SSL/TLS Full или Flexible; переключитесь на Full (strict), когда сертификат будет выпущен. С API-токеном Cloudflare панель также может проверить зону и создать правило, которое выводит путь ACME-челленджа из-под проверок Cloudflare, включая режим «I’m Under Attack». См. Cloudflare.

Типичные ошибки

Что вы видите Обычная причина и решение
Имя указано как не направленное на сервер Его A- или AAAA-запись указывает в другое место, или изменение ещё не дошло до кэшей DNS. Исправьте запись и подождите; имя добавится автоматически.
AAAA-запись указывает в другое место Удалите устаревшую AAAA-запись, направьте её на сервер или задайте PUBLIC_IPV6, если у сервера есть IPv6-адреса, которые панель не определила. Если у сервера нет IPv6, задайте PUBLIC_IPV6=none и удалите AAAA-записи.
Сертификатов нет вообще Не задан ACME_EMAIL. Задайте его в Настройки > Сертификаты.
Проверка не проходит, хотя DNS правильный Порт 80 закрыт в файрволе VPS-провайдера, или CDN либо прокси перед сервером блокирует /.well-known/acme-challenge/. Откройте TCP 80 и 443; для Cloudflare см. Cloudflare.
«Too many certificates already issued» Лимит запросов Let’s Encrypt. Подождите период, указанный в сообщении; панель повторит сама. Для экспериментов используйте staging.
Браузер предупреждает о самоподписанном сертификате Сертификат ещё не выпущен, или его файлы повреждены и заказывается новый. Проверьте вкладку SSL и журнал панели.

Журнал панели (Журнал в меню) показывает каждый заказ, каждое неудачное имя и ответ Let’s Encrypt. С сервера:

journalctl -u wardpane -f