Когда агент работает по адресу вашего домена, соединение с ним стоит защитить: HTTPS-протокол шифрует трафик, а браузер показывает настоящий адрес сайта и «замочек» вместо предупреждений о небезопасном соединении. Обычно для этого нужны сторонние программы и ручные настройки, но Pastukhov Agent умеет выпускать бесплатные SSL-сертификаты Let’s Encrypt прямо из своего веб-интерфейса — без Docker-контейнеров, дополнительных программ и ручного размещения проверочных файлов. Откройте в приложении страницу /ssl, укажите домен и email — сертификат будет получен автоматически и сохранён в папке конфигурации проекта (.pastukhov/ssl/ или .xedant/ssl/).
Как это работает
Встроенный ACME-клиент. Сертификат выпускается по открытому протоколу ACME — это технология автоматической выдачи сертификатов, по которой работают центры вроде Let’s Encrypt. Приложение само выступает в роли клиента ACME (встроенная библиотека Certes работает прямо в его процессе) — отдельный certbot или Docker-команды не нужны.
Проверка владения доменом (HTTP-01). Центр должен убедиться, что домен действительно ваш: он запрашивает одноразовый код по адресу http://{домен}/.well-known/acme-challenge/{код}. Пока проверка активна, приложение само отвечает на этот запрос — вам ничего размещать не нужно.
Сохранение файлов. Готовые сертификаты сохраняются в подпапке домена внутри папки SSL: fullchain.pem (полная цепочка сертификата) и privkey.pem (закрытый ключ). Ключ ACME-аккаунта (account-key.pem) сохраняется один раз и переиспользуется для последующих запросов.
Прогресс в реальном времени. Каждый шаг процесса отображается в интерфейсе мгновенно (обновления приходят по технологии SignalR) — вы видите текущее состояние: от регистрации аккаунта до сохранения сертификата.
Получение сертификата
- Откройте страницу
/sslвашего экземпляра Pastukhov Agent. - Укажите домен (например,
agent.example.com) и email для регистрации ACME-аккаунта. Email браузер запоминает и подставляет автоматически при следующих обращениях. - Отметьте «Использовать тестовый сервер» только для экспериментов — тестовые сертификаты браузеры не принимают, для настоящей работы галочку снимать нельзя.
- Нажмите «Получить сертификат» — приложение зарегистрирует ACME-аккаунт, создаст заказ, пройдёт проверку владения доменом и сохранит файлы сертификата.
- Прогресс отображается пошагово: регистрация аккаунта → создание заказа → настройка проверки → подтверждение домена → генерация сертификата → сохранение файлов.
Повторные запросы для того же домена допустимы — файлы перезаписываются, а существующий ACME-аккаунт переиспользуется.
Проверка текущего сертификата
Кнопка проверки рядом с полем домена показывает, какой сертификат установлен на домен в данный момент: кому он выдан и кем, период действия и сколько дней осталось (подсвечивается жёлтым, если осталось меньше 30 дней). Если сертификата нет — появляется соответствующее предупреждение.
Список сертификатов и удаление
Все выпущенные сертификаты перечислены на странице /ssl: домен, дата выдачи, срок действия и имена сохранённых файлов. Ненужный сертификат можно удалить одной кнопкой.
Что нужно для выпуска
- Домен (или поддомен) должен указывать на IP-адрес сервера, где запущен Pastukhov Agent;
- Порт
80(HTTP) должен быть доступен снаружи — через него Let’s Encrypt проводит проверку; - Для настоящих выпусков действуют лимиты Let’s Encrypt (порядка 5 сертификатов на домен в неделю) — для экспериментов используйте тестовый сервер.
Самоподписанный сертификат (без домена)
Если у вас нет домена — например, агент работает на сервере по IP-адресу или в локальной сети, — Let’s Encrypt неприменим: без домена нельзя доказать владение. Для таких случаев есть встроенный режим самоподписанного сертификата: HTTPS включается одним переключателем, без регистрации и внешних сервисов.
Браузер не может проверить, что такой сертификат выпущен доверенным центром, поэтому при первом заходе покажет предупреждение о безопасности — его нужно один раз пропустить (кнопка «Продолжить на сайт»). После этого соединение шифруется полноценно: пароли, токены и содержимое чатов защищены от перехвата в пути.
Как включить. Достаточно задать переменную окружения AGENT_SSL=auto при запуске. Переменные окружения — это параметры запуска: вы задаёте их один раз, и приложение применяет их автоматически. При старте приложение само сгенерирует сертификат (срок действия — 5 лет, продлевать не нужно) и начнёт слушать HTTPS-порт:
AGENT_SSL_PORT— порт для HTTPS (по умолчанию — номер HTTP-порта + 1, например, HTTP на8080→ HTTPS на8081);- сертификат сохраняется в папке
.pastukhov/ssl/auto/(fullchain.pem+privkey.pem) и при последующих запусках переиспользуется, пока действует; - в сертификат автоматически включаются все имена хостов и IP-адреса сервера — он подойдёт для обращения и по IP, и по имени в локальной сети;
- HTTP при этом продолжает работать как раньше — оба протокола доступны одновременно.
Переменная AGENT_SSL_DOMAINS позволяет явно перечислить через запятую домены/IP, которые нужно добавить в сертификат (используется в Docker-контейнерах MultiAgent, где имя хоста и адреса внутри контейнера не совпадают с тем адресом, по которому к агенту обращается браузер).
Какой вариант выбрать: если у вас есть домен и доступный порт 80 — используйте Let’s Encrypt (сертификат доверенный, предупреждений в браузере не будет); если домена нет или доступ только по IP — включите самоподписанный сертификат.
Подключение к nginx
После выпуска подключите сертификат в конфигурации вашего веб-сервера. Пример для nginx (пути — относительно корня проекта, где хранится папка .pastukhov):
server {
listen 443 ssl;
server_name agent.example.com;
ssl_certificate /srv/pastukhov/.pastukhov/ssl/agent.example.com/fullchain.pem;
ssl_certificate_key /srv/pastukhov/.pastukhov/ssl/agent.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
}
}
Автоматического продления (auto-renewal) в приложении пока нет — обновляйте сертификат заново через страницу /ssl до истечения срока. Let’s Encrypt выпускает сертификаты на 90 дней.