Skip to content

Commit c9abda7

Browse files
committed
fix(tls): correct pinned cert SHA-256 hint to hex, not base64
xray-core hex-decodes pinnedPeerCertSha256 and the panel forwards the value as-is into share links and the JSON subscription, so clients hex-decode it too. The tooltip/placeholder wrongly said base64 (copied from the retired pinnedPeerCertificateChainSha256 field), and the "generate random hash" button emitted base64 via btoa, producing an unusable pin. Tooltip/placeholder now say hex across all locales and the generator emits hex. Closes #4793
1 parent 13d02f0 commit c9abda7

14 files changed

Lines changed: 27 additions & 29 deletions

File tree

frontend/src/pages/inbounds/form/useSecurityActions.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,7 @@ export function useSecurityActions({ form, setSaving, messageApi }: UseSecurityA
9999
const generateRandomPinHash = () => {
100100
const bytes = new Uint8Array(32);
101101
crypto.getRandomValues(bytes);
102-
let binary = '';
103-
for (const b of bytes) binary += String.fromCharCode(b);
104-
const hash = btoa(binary);
102+
const hash = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
105103
const current = (form.getFieldValue(
106104
['streamSettings', 'tlsSettings', 'settings', 'pinnedPeerCertSha256'],
107105
) as string[] | undefined) ?? [];

web/translation/ar-EG.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "تكوين ECH",
557557
"pinnedPeerCertSha256": "SHA-256 لشهادة النظير المثبَّتة",
558-
"pinnedPeerCertSha256Tip": "تجزئات SHA-256 المُرمَّزة بـ Base64 لشهادة النظير. للوحة فقط — لا تُكتب في إعدادات xray على الخادم، لكنها تُضمَّن في روابط المشاركة ليتمكَّن العملاء من تثبيت الشهادة.",
559-
"pinnedPeerCertSha256Placeholder": "تجزئة (تجزئات) base64، مفصولة بفواصل",
558+
"pinnedPeerCertSha256Tip": "تجزئات SHA-256 لشهادة النظير كسلسلة سداسية عشرية (مثل e8e2d3…)، مفصولة بفواصل. للوحة فقط — لا تُكتب في إعدادات xray على الخادم، لكنها تُضمَّن في روابط المشاركة ليتمكَّن العملاء من تثبيت الشهادة.",
559+
"pinnedPeerCertSha256Placeholder": "تجزئة (تجزئات) سداسية عشرية، مفصولة بفواصل",
560560
"generateRandomPin": "إنشاء تجزئة عشوائية",
561561
"getNewEchCert": "احصل على شهادة ECH جديدة",
562562
"show": "عرض",

web/translation/en-US.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "ECH config",
557557
"pinnedPeerCertSha256": "Pinned Peer Cert SHA-256",
558-
"pinnedPeerCertSha256Tip": "Base64-encoded SHA-256 hashes of the peer certificate. Panel-only — not written to the server's xray config, but included in share links so clients can pin the certificate.",
559-
"pinnedPeerCertSha256Placeholder": "base64 hash(es), comma-separated",
558+
"pinnedPeerCertSha256Tip": "SHA-256 hash(es) of the peer certificate as a hex string (e.g. e8e2d3…), comma-separated. Panel-only — not written to the server's xray config, but included in share links so clients can pin the certificate.",
559+
"pinnedPeerCertSha256Placeholder": "hex hash(es), comma-separated",
560560
"generateRandomPin": "Generate random hash",
561561
"getNewEchCert": "Get New ECH Cert",
562562
"show": "Show",

web/translation/es-ES.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "Config ECH",
557557
"pinnedPeerCertSha256": "SHA-256 del cert. del par fijado",
558-
"pinnedPeerCertSha256Tip": "Hashes SHA-256 codificados en Base64 del certificado del par. Solo en el panel — no se escribe en la config xray del servidor, pero se incluye en los enlaces para que los clientes puedan fijar el certificado.",
559-
"pinnedPeerCertSha256Placeholder": "hash(es) base64, separados por comas",
558+
"pinnedPeerCertSha256Tip": "Hashes SHA-256 del certificado del par como cadena hexadecimal (p. ej. e8e2d3…), separados por comas. Solo en el panel — no se escribe en la config xray del servidor, pero se incluye en los enlaces para que los clientes puedan fijar el certificado.",
559+
"pinnedPeerCertSha256Placeholder": "hash(es) hexadecimal, separados por comas",
560560
"generateRandomPin": "Generar hash aleatorio",
561561
"getNewEchCert": "Obtener nuevo cert ECH",
562562
"show": "Mostrar",

web/translation/fa-IR.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "کلید ECH",
556556
"echConfig": "پیکربندی ECH",
557557
"pinnedPeerCertSha256": "SHA-256 پین‌شدهٔ گواهی همتا",
558-
"pinnedPeerCertSha256Tip": "هش‌های SHA-256 با کدگذاری Base64 از گواهی همتا. فقط در پنل — در پیکربندی xray سرور نوشته نمی‌شود، اما در لینک‌های اشتراک‌گذاری گنجانده می‌شود تا کلاینت‌ها بتوانند گواهی را پین کنند.",
559-
"pinnedPeerCertSha256Placeholder": "هش(های) base64، با کاما جدا شوند",
558+
"pinnedPeerCertSha256Tip": "هش‌های SHA-256 گواهی همتا به‌صورت رشتهٔ هگزادسیمال (مثل e8e2d3…)، با کاما جدا شوند. فقط در پنل — در پیکربندی xray سرور نوشته نمی‌شود، اما در لینک‌های اشتراک‌گذاری گنجانده می‌شود تا کلاینت‌ها بتوانند گواهی را پین کنند.",
559+
"pinnedPeerCertSha256Placeholder": "هش(های) هگزادسیمال، با کاما جدا شوند",
560560
"generateRandomPin": "تولید هش تصادفی",
561561
"getNewEchCert": "دریافت گواهی ECH جدید",
562562
"show": "نمایش",

web/translation/id-ID.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "Konfig ECH",
557557
"pinnedPeerCertSha256": "SHA-256 Sertifikat Peer Tersemat",
558-
"pinnedPeerCertSha256Tip": "Hash SHA-256 berenkode Base64 dari sertifikat peer. Hanya panel — tidak ditulis ke konfig xray server, tetapi disertakan dalam link berbagi agar klien dapat menyematkan sertifikat.",
559-
"pinnedPeerCertSha256Placeholder": "hash base64, dipisah koma",
558+
"pinnedPeerCertSha256Tip": "Hash SHA-256 dari sertifikat peer sebagai string heksadesimal (mis. e8e2d3…), dipisah koma. Hanya panel — tidak ditulis ke konfig xray server, tetapi disertakan dalam link berbagi agar klien dapat menyematkan sertifikat.",
559+
"pinnedPeerCertSha256Placeholder": "hash heksadesimal, dipisah koma",
560560
"generateRandomPin": "Hasilkan hash acak",
561561
"getNewEchCert": "Dapatkan sertifikat ECH baru",
562562
"show": "Tampilkan",

web/translation/ja-JP.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "ECH config",
557557
"pinnedPeerCertSha256": "ピン留めピア証明書 SHA-256",
558-
"pinnedPeerCertSha256Tip": "ピア証明書の Base64 エンコード SHA-256 ハッシュ。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
559-
"pinnedPeerCertSha256Placeholder": "Base64 ハッシュ、カンマ区切り",
558+
"pinnedPeerCertSha256Tip": "ピア証明書の SHA-256 ハッシュ(16進数文字列、例: e8e2d3…)、カンマ区切り。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
559+
"pinnedPeerCertSha256Placeholder": "16進ハッシュ、カンマ区切り",
560560
"generateRandomPin": "ランダムハッシュを生成",
561561
"getNewEchCert": "新しい ECH 証明書を取得",
562562
"show": "表示",

web/translation/pt-BR.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "Config ECH",
557557
"pinnedPeerCertSha256": "SHA-256 do cert. do par fixado",
558-
"pinnedPeerCertSha256Tip": "Hashes SHA-256 codificados em Base64 do certificado do par. Apenas no painel — não é gravado na config xray do servidor, mas é incluído nos links de compartilhamento para que clientes possam fixar o certificado.",
559-
"pinnedPeerCertSha256Placeholder": "hash(es) base64, separados por vírgula",
558+
"pinnedPeerCertSha256Tip": "Hashes SHA-256 do certificado do par como string hexadecimal (ex. e8e2d3…), separados por vírgula. Apenas no painel — não é gravado na config xray do servidor, mas é incluído nos links de compartilhamento para que clientes possam fixar o certificado.",
559+
"pinnedPeerCertSha256Placeholder": "hash(es) hexadecimal, separados por vírgula",
560560
"generateRandomPin": "Gerar hash aleatório",
561561
"getNewEchCert": "Obter novo certificado ECH",
562562
"show": "Mostrar",

web/translation/ru-RU.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "ECH config",
557557
"pinnedPeerCertSha256": "Закреплённый SHA-256 сертификата пира",
558-
"pinnedPeerCertSha256Tip": "SHA-256-хеши сертификата пира в кодировке Base64. Только для панели — не записывается в конфиг xray сервера, но включается в ссылки-приглашения, чтобы клиенты могли закрепить сертификат.",
559-
"pinnedPeerCertSha256Placeholder": "Base64-хеш(и), через запятую",
558+
"pinnedPeerCertSha256Tip": "SHA-256-хеши сертификата пира в виде шестнадцатеричной строки (напр. e8e2d3…), через запятую. Только для панели — не записывается в конфиг xray сервера, но включается в ссылки-приглашения, чтобы клиенты могли закрепить сертификат.",
559+
"pinnedPeerCertSha256Placeholder": "шестнадцатеричный хеш(и), через запятую",
560560
"generateRandomPin": "Сгенерировать случайный хеш",
561561
"getNewEchCert": "Получить новый ECH-сертификат",
562562
"show": "Показать",

web/translation/tr-TR.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -555,8 +555,8 @@
555555
"echKey": "ECH key",
556556
"echConfig": "ECH yapılandırması",
557557
"pinnedPeerCertSha256": "Sabitlenmiş Peer Sertifikası SHA-256",
558-
"pinnedPeerCertSha256Tip": "Peer sertifikasının Base64 kodlu SHA-256 hash'leri. Sadece panel — sunucunun xray yapılandırmasına yazılmaz, ancak istemcilerin sertifikayı sabitleyebilmesi için paylaşım bağlantılarına eklenir.",
559-
"pinnedPeerCertSha256Placeholder": "base64 hash(ler), virgülle ayrılmış",
558+
"pinnedPeerCertSha256Tip": "Peer sertifikasının SHA-256 hash'leri onaltılık (hex) dizge olarak (örn. e8e2d3…), virgülle ayrılmış. Sadece panel — sunucunun xray yapılandırmasına yazılmaz, ancak istemcilerin sertifikayı sabitleyebilmesi için paylaşım bağlantılarına eklenir.",
559+
"pinnedPeerCertSha256Placeholder": "onaltılık (hex) hash(ler), virgülle ayrılmış",
560560
"generateRandomPin": "Rastgele hash üret",
561561
"getNewEchCert": "Yeni ECH sertifikası al",
562562
"show": "Göster",

0 commit comments

Comments
 (0)