Skip to content

تأمین‌کنندگان گواهی — 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 است، به‌علاوهٔ فیلدهای نوع خود در همان سطح:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
typestring(required)acme | cloudflare-origin-ca | tailscaleنوع تأمین‌کنندهٔ گواهی؛ تعیین می‌کند کدام مجموعه از فیلدهای زیر اعمال شود. نوع ناشناخته هنگام راه‌اندازی شکست می‌خورد.
tagstring(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 ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
domainbadoption.Listable[string](required)<domain> | <IP address>نام‌هایی که برایشان گواهی گرفته می‌شود. آدرس IP پذیرفته می‌شود (profile را ببینید).
data_directorystring$XDG_DATA_HOME/certmagic<dir path>محل ذخیرهٔ داده‌های حساب ACME و گواهی‌ها. در نبود آن $HOME/.local/share/certmagic به کار می‌رود.
default_server_namestring(unset)<hostname>نام سروری که وقتی ClientHello فاقد SNI است برای انتخاب گواهی به کار می‌رود.
emailstring(unset)<e-mail>ایمیل برای ساخت یا انتخاب حساب ACME.
providerstringletsencryptletsencrypt | zerossl | <https:// directory URL>مرجع صدور ACME. برای zerossl یکی از external_account،‏ email یا account_key لازم است؛ با email و بدون external_account، اعتبارنامه‌های EAB خودکار درخواست می‌شوند.
account_keystring(unset)<PEM key>کلید خصوصی PEM یک حساب ACME موجود برای استفادهٔ دوباره.
disable_http_challengeboolfalsetrue | falseغیرفعال‌کردن چالش HTTP-01.
disable_tls_alpn_challengeboolfalsetrue | falseغیرفعال‌کردن چالش TLS-ALPN-01.
alternative_http_portuint1680<port>پورت شنوندهٔ چالش HTTP-01 به‌جای 80؛ پورت 80 همچنان باید به آن برسد.
alternative_tls_portuint16443<port>پورت شنوندهٔ چالش TLS-ALPN-01 به‌جای 443؛ سیستم باید 443 را به آن هدایت کند.
external_account*ACMEExternalAccountOptions(unset){ key_id, mac_key }اتصال حساب خارجی (EAB): شناسهٔ کلید و کلید MAC که مرجع صدور خارج از باند صادر کرده است.
dns01_challenge*ACMEProviderDNS01ChallengeOptions(unset)ACMEProviderDNS01ChallengeOptionsاستفاده از چالش DNS-01 (پایین را ببینید). در صورت تنظیم، انواع دیگر چالش غیرفعال می‌شوند.
key_typeACMEKeyType(library default)ed25519 | p256 | p384 | rsa2048 | rsa4096نوع کلید خصوصی برای گواهی‌های تازه صادرشده.
profilestring(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 به‌همراه اعتبارنامه‌های آن سرویس‌دهنده و این فیلدهای تنظیمی را می‌پذیرد:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
ttlbadoption.Duration(provider default)<duration>TTL رکورد موقت TXT ‏_acme-challenge.
propagation_delaybadoption.Duration0s<duration>پس از ساخت رکورد، این مدت صبر شود و سپس بررسی انتشار آغاز شود.
propagation_timeoutbadoption.Duration(library default)<duration> | -1پس از این مدت انتظار برای انتشار متوقف می‌شود؛ -1 بررسی انتشار را غیرفعال می‌کند.
resolversbadoption.Listable[string](system)<resolver> | …حل‌کننده‌های DNS برای بررسی انتشار.
override_domainstring(unset)<domain>رکورد چالش به‌جای آن زیر این دامنه نوشته شود — برای نام _acme-challenge که به منطقهٔ دیگری واگذار شده است.

منبع: option/acme.go:41-47 · ثابت‌شده در v1.14.2 (af6e64c)

providerفیلدهای اعتبارنامه
alidnsaccess_key_id، access_key_secret، region_id، security_token (اعتبارنامه‌های موقت STS)
cloudflareapi_token، zone_token (توکن اختیاری با Zone:Read، تا api_token بتواند به یک منطقه محدود شود)
acmednsusername، password، subdomain، server_url (یک سرور ACME-DNS)

cloudflare-origin-ca ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
domainbadoption.Listable[string](required)<domain> | *.<domain>نام‌های میزبان، از جمله wildcard، که در گواهی قرار می‌گیرند.
data_directorystring$XDG_DATA_HOME/certmagic<dir path>دایرکتوری ریشه برای گواهی صادرشده، کلید خصوصی و فراداده. پیش‌فرض همانند تأمین‌کنندهٔ ACME است.
api_tokenstring(unset)<token>توکن API کلودفلر با مجوز Zone / SSL and Certificates / Edit. دقیقاً یکی از api_token و origin_ca_key لازم است.
origin_ca_keystring(unset)<key>Cloudflare Origin CA Key، اعتبارنامهٔ جایگزین. با api_token ناسازگار است.
request_typeCloudflareOriginCARequestTypeorigin-rsaorigin-rsa | origin-eccنوع کلید درخواستی: RSA یا ECDSA P-256.
requested_validityCloudflareOriginCARequestValidity54757 | 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 ​

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
endpointstring(required)<endpoint tag>tag نقطه‌انتهایی Tailscale که گواهی گره‌اش (نام *.ts.net آن) ارائه می‌شود. MagicDNS و HTTPS باید در کنسول مدیریت Tailscale فعال باشند.

منبع: option/tailscale.go:78-80 · ثابت‌شده در v1.14.2 (af6e64c)

مثال‌ها ​

یک تأمین‌کنندهٔ ACME مشترک با چالش DNS-01 کلودفلر، که با tag به آن ارجاع می‌شود:

json
{
  "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" را تنظیم می‌کند:

json
{
  "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 به آن ارجاع می‌شود):

json
// قبل (منسوخ)
"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)

Core Tutorial اثر Argsment