---
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         | صدور یک گواهی کوتاه‌مدت (۶ روزه، با تمدید خودکار) برای یک **IP خام**. |
| Revoke                         | باطل‌کردن یک گواهی موجود.                                            |
| Force Renew                    | تمدید همین حالا، پیش از انقضا.                                       |
| Show Existing Domains          | فهرست‌کردن گواهی‌هایی که از پیش روی سرور هستند.                       |
| Set Cert paths for the panel   | اشاره‌دادن TLS پنل به یک گواهی صادرشده (فیلدها را برای شما تنظیم می‌کند). |

### صدور گواهی برای یک دامنه

<Steps>

<Step>
### دامنه را به سرور اشاره دهید

یک رکورد `A` (و/یا `AAAA`) برای دامنه‌ی خود بسازید که به IP عمومی این سرور
اشاره کند. تا زمانی که DNS منتشر (propagate) نشده باشد، اعتبارسنجی ناموفق خواهد بود.
</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** را انتخاب کنید تا یک گواهی
کوتاه‌مدت (با اعتبار حدود ۶ روز، که به‌صورت خودکار تمدید می‌شود) متصل به IP سرور
به‌دست آورید. برای دسترسی به پنل روی HTTPS پیش از آنکه دامنه‌ای راه‌اندازی کنید مفید است.

## Cloudflare (گواهی wildcard با DNS-01)

اعتبارسنجی DNS به‌جای پاسخ‌دادن روی پورت 80، با ساختن یک رکورد TXT ثابت می‌کند که شما
دامنه را در اختیار دارید — بنابراین **پشت پراکسی Cloudflare**، روی سرورهایی که
پورت 80 در آن‌ها مسدود است، و برای گواهی‌های **wildcard** (`*.example.com`) کار می‌کند.

DNS دامنه‌ی شما باید توسط Cloudflare مدیریت شود و به یکی از این موارد نیاز دارید:

- یک **توکن API محدودشده** با مجوز `Zone:DNS:Edit` (توصیه‌شده)، یا
- **ایمیل حساب + Global API Key**.

<Steps>

<Step>
### یک توکن API محدودشده بسازید

در داشبورد Cloudflare به **My Profile → API Tokens →
[Create Token](https://dash.cloudflare.com/profile/api-tokens)** بروید، قالب
**Edit zone DNS** را انتخاب کنید، آن را به zone‌ای که برایش گواهی صادر می‌کنید محدود
کنید و آن را بسازید. توکن را کپی کنید — فقط یک‌بار نمایش داده می‌شود.
</Step>

<Step>
### صادرکننده‌ی Cloudflare را اجرا کنید

`x-ui` ← **`21` — Cloudflare SSL Certificate**. هنگام پرسش، **`t`** را برای یک
توکن API (پیش‌فرض) یا **`g`** را برای Global API Key انتخاب کنید، سپس دامنه‌ی خود را
وارد کنید (و برای Global API Key، ایمیل حساب و کلید خود را). 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 را روی
  zoneای که انتخاب می‌کنید می‌دهد، بنابراین نشت آن نمی‌تواند به بقیه‌ی حساب 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: ۹۰ روز؛ گواهی‌های IP: حدود ۶ روز). هم منو و هم
  Certbot به‌صورت خودکار تمدید می‌کنند، اما پنل همچنان **فایل‌ها** را در مسیرهای ثابت‌شان
  می‌خواند — بنابراین **در همان محل** تمدید کنید نه با جابه‌جاکردن فایل‌ها، و پنل در
  راه‌اندازی مجدد بعدی‌اش گواهی جدید را برمی‌دارد. **Force Renew** (منوی `20`) یک تمدید
  را به‌صورت درخواستی فعال می‌کند.
</Callout>

## گام‌های بعدی

<Cards>
  <Card
    title="تنظیمات پنل"
    href="/docs/config/panel#tls"
    description="webCertFile / webKeyFile و بقیه‌ی تنظیمات وب‌سرور."
  />
  <Card
    title="پراکسی معکوس"
    href="/docs/operations/reverse-proxy"
    description="به‌جای آن، بگذارید Nginx یا Caddy کار خاتمه‌دادن TLS را برایتان انجام دهد."
  />
  <Card
    title="REALITY"
    href="/docs/config/reality"
    description="TLS مخفیانه برای ورودی‌ها — بدون نیاز به گواهی."
  />
</Cards>
