TLS — Xray-core
تنظیمات TLS در Xray زیر streamSettings.tlsSettings قرار میگیرند زمانی که streamSettings.security مقدار "tls" باشد. این ساختار همچنین ECH و خانوادهٔ اثرانگشت uTLS را پوشش میدهد. برای REALITY، به REALITY رجوع کنید — آن یک مقدار موازی streamSettings.security با بلوک خاص خودش است.
تنظیمات TLS
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
allowInsecure | bool | false | true | false | رد کردن بررسی گواهی سرور. فقط برای آزمایش استفاده کنید — پیکربندیهای تولید هرگز نباید این را تنظیم کنند. |
certificates | []*TLSCertConfig | [] | [TLSCertConfig] | گواهیهای سرور (ورودی) یا پینکردن CA مورد اعتماد (خروجی). چند ورودی انتخاب مبتنی بر SNI را در ورودی فعال میکند. |
serverName | string | (inferred) | <hostname> | نام سرور مورد انتظار. در خروجی، SNI ارسالی و مقداری که در برابر گواهی برگ سرور تأیید میشود. در ورودی، SNI استفادهشده زمانی که ACME یک گواهی تأمین میکند. |
alpn | *StringList | ["h2", "http/1.1"] | <ALPN string> | فهرست مذاکرهٔ پروتکل لایهٔ برنامه، که به همتا پیشنهاد میشود. |
enableSessionResumption | bool | false | true | false | فعال کردن از سرگیری نشست TLS با تیکت (سمت کلاینت). |
disableSystemRoot | bool | false | true | false | نادیده گرفتن مجموعه CA ریشهٔ سیستمعامل. وقتی true باشد، فقط ورودیهای `certificates` (در حالت `verify`) پذیرفته میشوند. |
minVersion | string | 1.2 | 1.0 | 1.1 | 1.2 | 1.3 | حداقل نسخهٔ قابل قبول TLS. |
maxVersion | string | 1.3 | 1.0 | 1.1 | 1.2 | 1.3 | حداکثر نسخهٔ قابل قبول TLS. |
cipherSuites | string | (library default) | <comma-separated cipher list> | بازنویسی فهرست مجموعهرمزها. از نامهای سبک OpenSSL استفاده میکند (مثلاً `TLS_AES_128_GCM_SHA256:...`). توجه: برای TLS 1.3 نادیده گرفته میشود — فقط انتخاب رمز 1.2 قابل پیکربندی است. |
fingerprint | string | (unset) | chrome | firefox | safari | edge | 360 | qq | ios | android | random | randomized | اثرانگشت کلاینتهلوی uTLS. کل شکل ClientHello را هدایت میکند (مجموعهرمزها، افزونهها، الگوریتمهای امضا) — فیلد صریح `cipherSuites` را بازنویسی میکند. |
rejectUnknownSni | bool | false | true | false | ورودی — اتصالهای TLS که SNI آنها با هیچیک از گواهیهای پیکربندیشده تطبیق نمیکند را رد کن. |
curvePreferences | *StringList | (library default) | X25519 | P-256 | P-384 | P-521 | X25519MLKEM768 | بازنویسی فهرست ترجیح منحنی تبادل کلید. ترتیب مهم است. |
masterKeyLog | string | (unset) | <file path> | مسیر سبک SSLKEYLOGFILE برای ضبط کلیدهای TLS (رمزگشایی Wireshark). در تولید فعال نکنید. |
pinnedPeerCertSha256 | string | (unset) | <base64 SHA-256> | پینکردن گواهی همتا. فقط خروجی — اتصال رد میشود اگر SHA-256 گواهی برگ تطبیق نکند. |
verifyPeerCertByName | string | (unset) | <hostname> | وقتی تنظیم شود، تطبیق Subject CN/SAN گواهی همتا با این نام را بهجای `serverName` تأیید کن. زمانی مفید است که SNI با نام گواهی متعارف متفاوت باشد (تنظیمات سبک REALITY). |
verifyPeerCertInNames | []string | [] | [<hostname>] | شکل فهرستی `verifyPeerCertByName` — هر نامی در فهرست قابل قبول است. |
echServerKeys | string | (unset) | <base64 ECHConfigList> | ورودی — مجموعه کلید ECH سرور. |
echConfigList | string | (unset) | <base64 ECHConfigList> | خروجی — فهرست پیکربندی ECH پینشده. وقتی تنظیم نشود، ECH از طریق جستوجوی DNS رکورد HTTPS بهطور خودکار کشف میشود. |
echForceQuery | string | (unset) | hkdf | dns | مکانیسم کشف خاص ECH را اجبار کن. خالی به آبشار پیشفرض رجوع میکند. |
echSockopt | *SocketConfig | (unset) | SocketConfig | گزینههای سوکت اعمالشده به درخواست DNS کشف ECH. |
منبع: infra/conf/transport_internet.go:646-667 · ثابتشده در v1.260327.0 (d2758a0)
certificates[]
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
certificateFile | string | (unset) | <PEM file path> | مسیر یک فایل PEM گواهی. متقابلاً منحصر با `certificate`. |
certificate | []string | (unset) | [<PEM line>] | PEM گواهی درونخطی بهصورت آرایهای از رشتهها (یک عنصر در هر خط، یا کل PEM بهعنوان یک عنصر). |
keyFile | string | (unset) | <PEM file path> | مسیر فایل PEM کلید خصوصی. |
key | []string | (unset) | [<PEM line>] | PEM کلید خصوصی درونخطی. |
usage | string | encipherment | encipherment | verify | issue | نقش این گواهی: `encipherment` (گواهی سرور)، `verify` (CA مورد اعتماد برای تأیید همتا)، `issue` (CA استفادهشده برای صدور گواهیهای per-connection در برخی حالتهای ارجاع). |
ocspStapling | uint64 | 3600 | <seconds> | هر چند ثانیه یکبار staple OCSP تازه شود. 0 غیرفعال میکند. |
oneTimeLoading | bool | false | true | false | گواهی و کلید را یکبار در راهاندازی بخوان بهجای هر بارگذاری مجدد. وقتی از `certificate`/`key` درونخطی استفاده شود بهطور خودکار true میشود (هیچ مسیری برای بارگذاری مجدد وجود ندارد). |
buildChain | bool | false | true | false | اگر PEM ارائهشده فقط برگ را داشته باشد، CAهای میانی را بهصورت خودکار دریافت کن تا یک زنجیرهٔ کامل ساخته شود. |
منبع: infra/conf/transport_internet.go:578-587 · ثابتشده در v1.260327.0 (d2758a0)
مثالها
خروجی — تأیید در برابر فروشگاه ریشهٔ سیستم، اجبار TLS 1.3، پین کردن اثرانگشت chrome:
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"alpn": ["h2", "http/1.1"],
"minVersion": "1.3",
"maxVersion": "1.3",
"fingerprint": "chrome"
}
}
}ورودی — ارائهٔ یک گواهی Let's Encrypt:
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"certificates": [
{
"certificateFile": "/etc/ssl/cert.pem",
"keyFile": "/etc/ssl/key.pem",
"usage": "encipherment",
"ocspStapling": 3600
}
],
"rejectUnknownSni": true
}
}
}خروجی با گواهی پینشده (قفل کردن روی یک SHA-256 خاص):
json
{
"streamSettings": {
"security": "tls",
"tlsSettings": {
"serverName": "example.com",
"pinnedPeerCertSha256": "<base64-SHA256-of-leaf-cert>"
}
}
}نکات
fingerprintهمان uTLS است — کل ClientHello را برای تقلید از مرورگر انتخابشده بازنویسی میکند. وقتی تنظیم شود،cipherSuites،curvePreferencesوminVersion/maxVersionعمدتاً نادیده گرفته میشوند چون uTLS خودش آنها را کنترل میکند.- TLS-1.3 طبق کتابخانهٔ استاندارد Go از
cipherSuitesصرفنظر میکند — فقط انتخاب رمز TLS 1.2 قابل پیکربندی است. ازcurvePreferencesبرای تأثیر بر انتخاب تبادل کلید در TLS 1.3 استفاده کنید. - فیلد
certificates[].usageحیاتی است:encipherment— گواهی معمولی سرور.verify— بهعنوان ریشهٔ CA مورد اعتماد در سمت خروجی استفاده میشود. همراه باdisableSystemRoot: trueبرای نادیده گرفتن مجموعهٔ سیستمعامل.issue— برای صدور گواهیهای per-connection در برخی حالتهای ارجاع استفاده میشود (عبور MITM HTTPS).
verifyPeerCertByNameSNI را از نام تأییدشده جدا میکند — در تنظیمات سبک REALITY مفید است که SNI یک سایت عمومی است اما گواهی واقعی برای سرور Xray است.masterKeyLogیک کمک عیبیابی است؛ فرمت فایل با مشخصات SSLKEYLOGFILE که Wireshark مصرف میکند تطبیق میکند. هرگز در تولید فعال نکنید.
نکات بینهستهای
- sing-box از یک بلوک واحد
tls: { ... }استفاده میکند که در هر ورودی و خروجی تعبیه میشود. نام فیلدها snake_case هستند (server_name,cipher_suites) و REALITY / ECH / uTLS بهعنوان زیربلوکهای تو در تو قرار دارند. ببینید TLS — sing-box. - mihomo فیلدهای TLS را مستقیماً روی هر آداپتور پراکسی پخش میکند —
tls,sni,alpn,skip-cert-verifyو غیره. هیچ بلوک TLS یکپارچهای وجود ندارد. ببینید TLS — mihomo.
منبع: infra/conf/transport_internet.go:646-667 · v1.260327.0 (d2758a0)
