3x-ui3x-ui
Конфигурация

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

Получение и продление TLS-сертификатов для панели и входящих подключений 3x-ui — через меню ACME в x-ui (домен или голый IP), wildcard через Cloudflare DNS-01 или вручную с помощью Certbot.

TLS-сертификат позволяет обслуживать панель по HTTPS (чтобы трафик входа и API был зашифрован) и терминировать TLS на входящих подключениях (VLESS-TLS, Trojan, Shadowsocks-TLS и им подобных). Получить его можно тремя способами:

  • Меню x-ui — встроенный ACME-клиент. Проще всего для одного домена или голого IP.
  • Cloudflare DNS-01 — тоже из меню; нужен для wildcard-сертификатов или когда порт 80 заблокирован / сервер находится за прокси Cloudflare.
  • Вручную через Certbot — если вы предпочитаете управлять acme.sh/Certbot самостоятельно.

Если вы размещаете панель за Nginx или Caddy, доверьте управление сертификатом прокси-серверу — см. Обратный прокси. Входящим подключениям REALITY сертификат не нужен вовсе; они заимствуют TLS реального сайта. Эта страница — про панель и про классические TLS-входящие подключения.

Меню SSL в x-ui (Let's Encrypt)

Запустите x-ui и выберите 20 — SSL Certificate Management. Оно управляет acme.sh и предлагает:

ОпцияЧто делает
Get SSL (Domain)Выпустить сертификат для домена через HTTP-проверку.
Get SSL for IP AddressВыпустить короткоживущий (6-дневный, автопродление) сертификат для голого IP.
RevokeОтозвать существующий сертификат.
Force RenewПродлить сейчас, до истечения срока.
Show Existing DomainsПеречислить сертификаты, уже имеющиеся на сервере.
Set Cert paths for the panelУказать панели путь к выпущенному сертификату (заполняет поля за вас).

Выпуск сертификата для домена

Направьте домен на сервер

Создайте запись A (и/или AAAA) для вашего домена, которая указывает на публичный IP этого сервера. Проверка не пройдёт, пока DNS не распространится.

Освободите порт 80

HTTP-проверке нужен порт 80, доступный из интернета и ещё не занятый. На время проверки остановите всё, что к нему привязано, и откройте его в файрволе.

Запустите выпуск

x-ui20Get SSL (Domain), затем введите домен. acme.sh запрашивает сертификат и сохраняет его в каталоге /root/cert/<domain>/ как fullchain.pem (цепочка сертификатов) и privkey.pem (приватный ключ).

Подключите его к панели

Выберите Set Cert paths for the panel, чтобы заполнить webCertFile и webKeyFile и перезапустить панель, либо задайте их сами в разделе Настройки панели. Панель начинает обслуживать HTTPS, как только заданы оба значения.

Выпуск сертификата для голого IP

Нет домена? Выберите Get SSL for IP Address, чтобы получить короткоживущий сертификат (действует ~6 дней, продлевается автоматически), привязанный к IP сервера. Полезно для доступа к панели по HTTPS до того, как вы настроите домен.

Cloudflare (wildcard через DNS-01)

DNS-проверка подтверждает, что вы управляете доменом, путём создания TXT-записи вместо ответа на порту 80 — поэтому она работает за прокси Cloudflare, на серверах, где порт 80 заблокирован, и для wildcard-сертификатов (*.example.com).

DNS вашего домена должен управляться Cloudflare, и вам понадобится одно из:

  • ограниченный по области API-токен с правом Zone:DNS:Edit (рекомендуется), либо
  • email вашей учётной записи + Global API Key.

Создайте ограниченный API-токен

В панели Cloudflare перейдите в My Profile → API Tokens → Create Token, выберите шаблон Edit zone DNS, ограничьте его областью той зоны, для которой выпускаете сертификат, и создайте токен. Скопируйте его — он показывается только один раз.

Запустите выпуск через Cloudflare

x-ui21 — Cloudflare SSL Certificate. На запрос выберите t для API-токена (по умолчанию) или g для Global API Key, затем введите свой домен (а для Global API Key — ещё email учётной записи и ключ). acme.sh создаёт TXT-запись, проходит проверку и убирает её.

Направьте на него панель

Как и в случае с доменом, используйте Set Cert paths for the panel (меню 20) или задайте webCertFile / webKeyFile в разделе Настройки панели.

Предпочитайте ограниченный токен Global API Key — он даёт право только на изменение DNS в выбранной вами зоне, поэтому его утечка не затронет остальную часть вашей учётной записи Cloudflare.

Вручную (Certbot)

Если вы предпочитаете не пользоваться меню, выпустите сертификат с помощью standalone-плагина Certbot (это, опять же, требует свободного порта 80 и домена, указывающего на сервер):

apt-get install certbot -y
certbot certonly --standalone --agree-tos --register-unsafely-without-email -d yourdomain.com
certbot renew --dry-run

Certbot записывает сертификат в /etc/letsencrypt/live/yourdomain.com/ (fullchain.pem и privkey.pem). Укажите панели путь к этим двум файлам в разделе Настройки панели и настройте продление — certbot renew по умолчанию запускается через таймер systemd.

Использование сертификата

  • Панель — задайте webCertFile (полная цепочка) и webKeyFile (приватный ключ) в разделе Настройки панели. Чтобы панель переключилась на HTTPS, должны быть заданы оба. Пункт меню 11 — View Current Settings выводит пути, используемые в данный момент.
  • Входящие подключения — когда вы включаете TLS на входящем подключении, укажите те же файлы сертификата и ключа (или вставьте их содержимое) в настройках TLS этого подключения. См. Входящие подключения и Транспорты.

Сертификаты истекают (Let's Encrypt: 90 дней; IP-сертификаты: ~6 дней). И меню, и Certbot продлевают их автоматически, но панель продолжает читать файлы по их фиксированным путям — поэтому продлевайте на месте, а не перемещайте файлы, и панель подхватит новый сертификат при следующем перезапуске. Force Renew (меню 20) запускает продление по требованию.

Дальнейшие шаги

On this page