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

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

- **Меню `x-ui`** — встроенный [ACME](https://en.wikipedia.org/wiki/Automatic_Certificate_Management_Environment)-клиент.
  Проще всего для одного домена или голого IP.
- **Cloudflare DNS-01** — тоже из меню; нужен для **wildcard**-сертификатов или
  когда порт 80 заблокирован / сервер находится за прокси Cloudflare.
- **Вручную через Certbot** — если вы предпочитаете управлять `acme.sh`/Certbot самостоятельно.

<Callout type="info">
  Если вы размещаете панель за Nginx или Caddy, доверьте управление
  сертификатом прокси-серверу — см. [Обратный прокси](/docs/operations/reverse-proxy).
  Входящим подключениям [REALITY](/docs/config/reality) сертификат **не нужен вовсе**; они
  заимствуют TLS реального сайта. Эта страница — про панель и про классические TLS-входящие
  подключения.
</Callout>

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

Запустите `x-ui` и выберите **`20` — SSL Certificate Management**. Оно управляет
[acme.sh](https://github.com/acmesh-official/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   | Указать панели путь к выпущенному сертификату (заполняет поля за вас). |

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

<Steps>

<Step>
### Направьте домен на сервер

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

<Step>
### Освободите порт 80

HTTP-проверке нужен **порт 80**, доступный из интернета и ещё не занятый. На время
проверки остановите всё, что к нему привязано, и откройте его в
[файрволе](/docs/reference/ports-firewall).
</Step>

<Step>
### Запустите выпуск

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

<Step>
### Подключите его к панели

Выберите **Set Cert paths for the panel**, чтобы заполнить `webCertFile` и
`webKeyFile` и перезапустить панель, либо задайте их сами в разделе
[Настройки панели](/docs/config/panel#tls). Панель начинает обслуживать HTTPS, как только
заданы оба значения.
</Step>

</Steps>

### Выпуск сертификата для голого 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**.

<Steps>

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

В панели Cloudflare перейдите в **My Profile → API Tokens →
[Create Token](https://dash.cloudflare.com/profile/api-tokens)**, выберите шаблон
**Edit zone DNS**, ограничьте его областью той зоны, для которой выпускаете сертификат, и создайте
токен. Скопируйте его — он показывается только один раз.
</Step>

<Step>
### Запустите выпуск через Cloudflare

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

<Step>
### Направьте на него панель

Как и в случае с доменом, используйте **Set Cert paths for the panel** (меню `20`) или задайте
`webCertFile` / `webKeyFile` в разделе [Настройки панели](/docs/config/panel#tls).
</Step>

</Steps>

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

## Вручную (Certbot)

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

```bash
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`). Укажите панели путь к этим двум файлам в разделе
[Настройки панели](/docs/config/panel#tls) и настройте продление — `certbot renew`
по умолчанию запускается через таймер systemd.

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

- **Панель** — задайте `webCertFile` (полная цепочка) и `webKeyFile` (приватный
  ключ) в разделе [Настройки панели](/docs/config/panel#tls). Чтобы панель переключилась
  на HTTPS, должны быть заданы оба. Пункт меню **`11` — View Current Settings** выводит
  пути, используемые в данный момент.
- **Входящие подключения** — когда вы включаете TLS на входящем подключении, укажите те же
  файлы сертификата и ключа (или вставьте их содержимое) в настройках TLS этого подключения.
  См. [Входящие подключения](/docs/config/inbounds) и
  [Транспорты](/docs/config/transports).

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

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

<Cards>
  <Card
    title="Настройки панели"
    href="/docs/config/panel#tls"
    description="webCertFile / webKeyFile и остальные настройки веб-сервера."
  />
  <Card
    title="Обратный прокси"
    href="/docs/operations/reverse-proxy"
    description="Доверьте терминирование TLS Nginx или Caddy."
  />
  <Card
    title="REALITY"
    href="/docs/config/reality"
    description="Скрытный TLS для входящих подключений — сертификат не требуется."
  />
</Cards>
