---
title: "SSL-сертификаты"
id: "1527"
type: "page"
slug: "ssl"
published_at: "2026-08-28T04:28:56+00:00"
modified_at: "2026-09-05T01:25:59+00:00"
url: "https://pastukhov.com/agents/agent/docs/ssl"
markdown_url: "https://pastukhov.com/agents/agent/docs/ssl.md"
excerpt: "Когда агент работает по адресу вашего домена, соединение с ним стоит защитить: HTTPS-протокол шифрует трафик,…"
---

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

[https://pastukhov.com/agents/agent/docs/ssl.md](https://pastukhov.com/agents/agent/docs/ssl.md)

Когда агент работает по адресу вашего домена, соединение с ним стоит защитить: 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) — вы видите текущее состояние: от регистрации аккаунта до сохранения сертификата.

## Получение сертификата

1. Откройте страницу `/ssl` вашего экземпляра Pastukhov Agent.
2. Укажите домен (например, `agent.example.com`) и email для регистрации ACME-аккаунта. Email браузер запоминает и подставляет автоматически при следующих обращениях.
3. Отметьте «Использовать тестовый сервер» только для экспериментов — тестовые сертификаты браузеры не принимают, для настоящей работы галочку снимать нельзя.
4. Нажмите «Получить сертификат» — приложение зарегистрирует ACME-аккаунт, создаст заказ, пройдёт проверку владения доменом и сохранит файлы сертификата.
5. Прогресс отображается пошагово: регистрация аккаунта → создание заказа → настройка проверки → подтверждение домена → генерация сертификата → сохранение файлов.

Повторные запросы для того же домена допустимы — файлы перезаписываются, а существующий 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 дней.
