Files
3x-ui/docs/content/docs/ru/config/ssl-certificates.mdx
T
MHSanaei 9b91f0f42e docs: vendor the documentation site into the monorepo
Fold the standalone 3x-ui-docs project (Next.js 16 + Fumadocs, deployed to
docs.sanaei.dev) into docs/ so the panel and its documentation share a single
source of truth, the way sing-box keeps its docs in-tree. The old repo becomes
redundant and can be retired.

- Import the full site under docs/ (app, components, content, lib, public,
  scripts, config). The self-contained pnpm project sits alongside the existing
  engineering notes with no filename collisions.
- Re-point "Edit on GitHub" links from MHSanaei/3x-ui-docs to this repo's
  docs/content/docs path (docs/lib/shared.ts, docs/app/.../page.tsx).
- Add docs-ci.yml and docs-deploy.yml under .github/workflows/, scoped to
  docs/** and run with working-directory: docs, since GitHub only runs
  workflows from the repo-root .github/. deploy-static.yml's GitHub Pages
  publish (CNAME docs.sanaei.dev) carries over unchanged.

Follow-up (outside this commit): attach the docs.sanaei.dev custom domain to
this repository's Pages (or set the Vercel project's root directory to docs),
confirm the site is live from the monorepo, then delete MHSanaei/3x-ui-docs.
2026-07-07 23:07:14 +02:00

182 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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>