تأمینکنندگان گواهی — sing-box
تأمینکنندگان گواهی، گواهیهای سرور TLS را برای ورودیها میگیرند و تمدید میکنند. آنها را در آرایهٔ سطح بالای certificate_providers تعریف کنید و از بلوک tls یک ورودی با certificate_provider به یکی ارجاع دهید — با tag، یا بهصورت درونخطی به شکل شیئی با type خودش. سه نوع وجود دارد: acme (Let's Encrypt، ZeroSSL یا هر مرجع صدور ACME)، cloudflare-origin-ca (گواهیهای Origin CA کلودفلر) و tailscale (گواهی tailnet گره از طریق یک نقطهانتهایی Tailscale). اینها جایگزین بلوک درونخطی tls.acme میشوند که منسوخ شده است.
پاکت
هر مدخل certificate_providers[] دارای type و tag است، بهعلاوهٔ فیلدهای نوع خود در همان سطح:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
type | string | (required) | acme | cloudflare-origin-ca | tailscale | نوع تأمینکنندهٔ گواهی؛ تعیین میکند کدام مجموعه از فیلدهای زیر اعمال شود. نوع ناشناخته هنگام راهاندازی شکست میخورد. |
tag | string | (unset) | <string> | نامی که فیلدهای tls.certificate_provider در ورودیها به آن ارجاع میدهند. تأمینکنندههای درونخطی از آن استفاده نمیکنند. |
منبع: option/certificate_provider.go:18-22 · ثابتشده در v1.14.2 (af6e64c)
یک ورودی با tls.certificate_provider از تأمینکنندهٔ گواهی استفاده میکند: رشته، tag یک مدخل certificate_providers است و شیء، یک تأمینکنندهٔ درونخطی با type خودش. برای رابطهٔ آن با certificate / key، بلوک درونخطی acme و REALITY، TLS را ببینید.
acme
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
domain | badoption.Listable[string] | (required) | <domain> | <IP address> | نامهایی که برایشان گواهی گرفته میشود. آدرس IP پذیرفته میشود (profile را ببینید). |
data_directory | string | $XDG_DATA_HOME/certmagic | <dir path> | محل ذخیرهٔ دادههای حساب ACME و گواهیها. در نبود آن $HOME/.local/share/certmagic به کار میرود. |
default_server_name | string | (unset) | <hostname> | نام سروری که وقتی ClientHello فاقد SNI است برای انتخاب گواهی به کار میرود. |
email | string | (unset) | <e-mail> | ایمیل برای ساخت یا انتخاب حساب ACME. |
provider | string | letsencrypt | letsencrypt | zerossl | <https:// directory URL> | مرجع صدور ACME. برای zerossl یکی از external_account، email یا account_key لازم است؛ با email و بدون external_account، اعتبارنامههای EAB خودکار درخواست میشوند. |
account_key | string | (unset) | <PEM key> | کلید خصوصی PEM یک حساب ACME موجود برای استفادهٔ دوباره. |
disable_http_challenge | bool | false | true | false | غیرفعالکردن چالش HTTP-01. |
disable_tls_alpn_challenge | bool | false | true | false | غیرفعالکردن چالش TLS-ALPN-01. |
alternative_http_port | uint16 | 80 | <port> | پورت شنوندهٔ چالش HTTP-01 بهجای 80؛ پورت 80 همچنان باید به آن برسد. |
alternative_tls_port | uint16 | 443 | <port> | پورت شنوندهٔ چالش TLS-ALPN-01 بهجای 443؛ سیستم باید 443 را به آن هدایت کند. |
external_account | *ACMEExternalAccountOptions | (unset) | { key_id, mac_key } | اتصال حساب خارجی (EAB): شناسهٔ کلید و کلید MAC که مرجع صدور خارج از باند صادر کرده است. |
dns01_challenge | *ACMEProviderDNS01ChallengeOptions | (unset) | ACMEProviderDNS01ChallengeOptions | استفاده از چالش DNS-01 (پایین را ببینید). در صورت تنظیم، انواع دیگر چالش غیرفعال میشوند. |
key_type | ACMEKeyType | (library default) | ed25519 | p256 | p384 | rsa2048 | rsa4096 | نوع کلید خصوصی برای گواهیهای تازه صادرشده. |
profile | string | (unset) | <ACME profile> | پروفایل ACME درخواستی. با Let's Encrypt، وقتی هر یک از دامنهها آدرس IP باشد، shortlived خودکار انتخاب میشود. |
http_client | *HTTPClientOptions | (default client) | <http_clients tag> | HTTPClientOptions | کلاینت HTTP برای همهٔ درخواستهای ACME: یک شیء درونخطی یا tag یکی از مدخلهای http_clients. |
منبع: option/acme.go:15-31 · ثابتشده در v1.14.2 (af6e64c)
چالش DNS-01
dns01_challenge یک provider بههمراه اعتبارنامههای آن سرویسدهنده و این فیلدهای تنظیمی را میپذیرد:
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
ttl | badoption.Duration | (provider default) | <duration> | TTL رکورد موقت TXT _acme-challenge. |
propagation_delay | badoption.Duration | 0s | <duration> | پس از ساخت رکورد، این مدت صبر شود و سپس بررسی انتشار آغاز شود. |
propagation_timeout | badoption.Duration | (library default) | <duration> | -1 | پس از این مدت انتظار برای انتشار متوقف میشود؛ -1 بررسی انتشار را غیرفعال میکند. |
resolvers | badoption.Listable[string] | (system) | <resolver> | … | حلکنندههای DNS برای بررسی انتشار. |
override_domain | string | (unset) | <domain> | رکورد چالش بهجای آن زیر این دامنه نوشته شود — برای نام _acme-challenge که به منطقهٔ دیگری واگذار شده است. |
منبع: option/acme.go:41-47 · ثابتشده در v1.14.2 (af6e64c)
provider | فیلدهای اعتبارنامه |
|---|---|
alidns | access_key_id، access_key_secret، region_id، security_token (اعتبارنامههای موقت STS) |
cloudflare | api_token، zone_token (توکن اختیاری با Zone:Read، تا api_token بتواند به یک منطقه محدود شود) |
acmedns | username، password، subdomain، server_url (یک سرور ACME-DNS) |
cloudflare-origin-ca
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
domain | badoption.Listable[string] | (required) | <domain> | *.<domain> | نامهای میزبان، از جمله wildcard، که در گواهی قرار میگیرند. |
data_directory | string | $XDG_DATA_HOME/certmagic | <dir path> | دایرکتوری ریشه برای گواهی صادرشده، کلید خصوصی و فراداده. پیشفرض همانند تأمینکنندهٔ ACME است. |
api_token | string | (unset) | <token> | توکن API کلودفلر با مجوز Zone / SSL and Certificates / Edit. دقیقاً یکی از api_token و origin_ca_key لازم است. |
origin_ca_key | string | (unset) | <key> | Cloudflare Origin CA Key، اعتبارنامهٔ جایگزین. با api_token ناسازگار است. |
request_type | CloudflareOriginCARequestType | origin-rsa | origin-rsa | origin-ecc | نوع کلید درخواستی: RSA یا ECDSA P-256. |
requested_validity | CloudflareOriginCARequestValidity | 5475 | 7 | 30 | 90 | 365 | 730 | 1095 | 5475 | اعتبار گواهی به روز (5475 = 15 سال). |
http_client | *HTTPClientOptions | (default client) | <http_clients tag> | HTTPClientOptions | کلاینت HTTP برای درخواستهای API کلودفلر: یک شیء درونخطی یا tag یکی از مدخلهای http_clients. |
منبع: option/origin_ca.go:12-20 · ثابتشده در v1.14.2 (af6e64c)
tailscale
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
endpoint | string | (required) | <endpoint tag> | tag نقطهانتهایی Tailscale که گواهی گرهاش (نام *.ts.net آن) ارائه میشود. MagicDNS و HTTPS باید در کنسول مدیریت Tailscale فعال باشند. |
منبع: option/tailscale.go:78-80 · ثابتشده در v1.14.2 (af6e64c)
مثالها
یک تأمینکنندهٔ ACME مشترک با چالش DNS-01 کلودفلر، که با tag به آن ارجاع میشود:
{
"certificate_providers": [
{
"type": "acme",
"tag": "le",
"domain": ["example.com"],
"email": "admin@example.com",
"dns01_challenge": {
"provider": "cloudflare",
"api_token": "<cloudflare-api-token>"
}
}
],
"inbounds": [
{
"type": "trojan",
"tag": "trojan-in",
"listen": "::",
"listen_port": 443,
"users": [{ "name": "user", "password": "<password>" }],
"tls": {
"enabled": true,
"certificate_provider": "le"
}
}
]
}گواهی tailnet یک نقطهانتهایی Tailscale؛ سپس یک ورودی "certificate_provider": "ts-cert" را تنظیم میکند:
{
"endpoints": [
{ "type": "tailscale", "tag": "ts-ep", "auth_key": "tskey-auth-xxxxxxxxxxxx" }
],
"certificate_providers": [
{ "type": "tailscale", "tag": "ts-cert", "endpoint": "ts-ep" }
]
}مهاجرت از tls.acme درونخطی
فیلدهای tls.acme را بدون تغییر به tls.certificate_provider منتقل کنید و "type": "acme" را بیفزایید (یا به یک مدخل certificate_providers که با tag به آن ارجاع میشود):
// قبل (منسوخ)
"tls": { "enabled": true, "acme": { "domain": ["example.com"], "email": "admin@example.com" } }
// بعد
"tls": { "enabled": true, "certificate_provider": { "type": "acme", "domain": ["example.com"], "email": "admin@example.com" } }نکات
- برچسبهای ساخت:
acmeبهwith_acmeوtailscaleبهwith_tailscaleنیاز دارد؛ بدون آنها نوع وجود دارد اما هنگام راهاندازی شکست میخورد.cloudflare-origin-caهمیشه کامپایل میشود. - یک تأمینکنندهٔ دارای tag میتواند مورد ارجاع چند ورودی باشد.
- گواهیهای Cloudflare Origin CA فقط مورد اعتماد لبهٔ خود کلودفلر هستند. از آنها روی سرورهای مبدأ پشت پراکسی کلودفلر استفاده کنید، نه برای کلاینتهایی که مستقیماً وصل میشوند. تأمینکننده آنها را پیش از انقضا خودکار تمدید میکند.
- اگر
endpointخالی، ناموجود یا غیر از نقطهانتهایی Tailscale باشد، تأمینکنندهٔtailscaleهنگام راهاندازی شکست میخورد. - فیلدهای ACME با بلوک منسوخ درونخطی
tls.acmeیکساناند، بهعلاوهٔaccount_key،key_type،profileوhttp_client.
نکات بینهستهای
- Xray-core هیچ ACME یا تأمینکنندهٔ گواهی داخلی ندارد: گواهیهای سرور از فایلها یا PEM درونخطی در
tlsSettings.certificatesمیآیند. TLS — Xray-core را ببینید. - mihomo نیز ندارد: شنوندهها مستقیماً یک گواهی و کلید خصوصی میپذیرند. نمای کلی TLS — mihomo را ببینید.
منبع: option/certificate_provider.go:18-69 · v1.14.2 (af6e64c)
