mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-03 02:49:36 +00:00
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
This commit is contained in:
@@ -99,9 +99,7 @@ export function useSecurityActions({ form, setSaving, messageApi }: UseSecurityA
|
||||
const generateRandomPinHash = () => {
|
||||
const bytes = new Uint8Array(32);
|
||||
crypto.getRandomValues(bytes);
|
||||
let binary = '';
|
||||
for (const b of bytes) binary += String.fromCharCode(b);
|
||||
const hash = btoa(binary);
|
||||
const hash = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
|
||||
const current = (form.getFieldValue(
|
||||
['streamSettings', 'tlsSettings', 'settings', 'pinnedPeerCertSha256'],
|
||||
) as string[] | undefined) ?? [];
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "تكوين ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 لشهادة النظير المثبَّتة",
|
||||
"pinnedPeerCertSha256Tip": "تجزئات SHA-256 المُرمَّزة بـ Base64 لشهادة النظير. للوحة فقط — لا تُكتب في إعدادات xray على الخادم، لكنها تُضمَّن في روابط المشاركة ليتمكَّن العملاء من تثبيت الشهادة.",
|
||||
"pinnedPeerCertSha256Placeholder": "تجزئة (تجزئات) base64، مفصولة بفواصل",
|
||||
"pinnedPeerCertSha256Tip": "تجزئات SHA-256 لشهادة النظير كسلسلة سداسية عشرية (مثل e8e2d3…)، مفصولة بفواصل. للوحة فقط — لا تُكتب في إعدادات xray على الخادم، لكنها تُضمَّن في روابط المشاركة ليتمكَّن العملاء من تثبيت الشهادة.",
|
||||
"pinnedPeerCertSha256Placeholder": "تجزئة (تجزئات) سداسية عشرية، مفصولة بفواصل",
|
||||
"generateRandomPin": "إنشاء تجزئة عشوائية",
|
||||
"getNewEchCert": "احصل على شهادة ECH جديدة",
|
||||
"show": "عرض",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH config",
|
||||
"pinnedPeerCertSha256": "Pinned Peer Cert SHA-256",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "base64 hash(es), comma-separated",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hex hash(es), comma-separated",
|
||||
"generateRandomPin": "Generate random hash",
|
||||
"getNewEchCert": "Get New ECH Cert",
|
||||
"show": "Show",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "Config ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 del cert. del par fijado",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash(es) base64, separados por comas",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash(es) hexadecimal, separados por comas",
|
||||
"generateRandomPin": "Generar hash aleatorio",
|
||||
"getNewEchCert": "Obtener nuevo cert ECH",
|
||||
"show": "Mostrar",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "کلید ECH",
|
||||
"echConfig": "پیکربندی ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 پینشدهٔ گواهی همتا",
|
||||
"pinnedPeerCertSha256Tip": "هشهای SHA-256 با کدگذاری Base64 از گواهی همتا. فقط در پنل — در پیکربندی xray سرور نوشته نمیشود، اما در لینکهای اشتراکگذاری گنجانده میشود تا کلاینتها بتوانند گواهی را پین کنند.",
|
||||
"pinnedPeerCertSha256Placeholder": "هش(های) base64، با کاما جدا شوند",
|
||||
"pinnedPeerCertSha256Tip": "هشهای SHA-256 گواهی همتا بهصورت رشتهٔ هگزادسیمال (مثل e8e2d3…)، با کاما جدا شوند. فقط در پنل — در پیکربندی xray سرور نوشته نمیشود، اما در لینکهای اشتراکگذاری گنجانده میشود تا کلاینتها بتوانند گواهی را پین کنند.",
|
||||
"pinnedPeerCertSha256Placeholder": "هش(های) هگزادسیمال، با کاما جدا شوند",
|
||||
"generateRandomPin": "تولید هش تصادفی",
|
||||
"getNewEchCert": "دریافت گواهی ECH جدید",
|
||||
"show": "نمایش",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "Konfig ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 Sertifikat Peer Tersemat",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash base64, dipisah koma",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash heksadesimal, dipisah koma",
|
||||
"generateRandomPin": "Hasilkan hash acak",
|
||||
"getNewEchCert": "Dapatkan sertifikat ECH baru",
|
||||
"show": "Tampilkan",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH config",
|
||||
"pinnedPeerCertSha256": "ピン留めピア証明書 SHA-256",
|
||||
"pinnedPeerCertSha256Tip": "ピア証明書の Base64 エンコード SHA-256 ハッシュ。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
|
||||
"pinnedPeerCertSha256Placeholder": "Base64 ハッシュ、カンマ区切り",
|
||||
"pinnedPeerCertSha256Tip": "ピア証明書の SHA-256 ハッシュ(16進数文字列、例: e8e2d3…)、カンマ区切り。パネルのみ — サーバーの xray 設定には書き込まれませんが、共有リンクには含まれ、クライアントが証明書をピン留めできます。",
|
||||
"pinnedPeerCertSha256Placeholder": "16進ハッシュ、カンマ区切り",
|
||||
"generateRandomPin": "ランダムハッシュを生成",
|
||||
"getNewEchCert": "新しい ECH 証明書を取得",
|
||||
"show": "表示",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "Config ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 do cert. do par fixado",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash(es) base64, separados por vírgula",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash(es) hexadecimal, separados por vírgula",
|
||||
"generateRandomPin": "Gerar hash aleatório",
|
||||
"getNewEchCert": "Obter novo certificado ECH",
|
||||
"show": "Mostrar",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH config",
|
||||
"pinnedPeerCertSha256": "Закреплённый SHA-256 сертификата пира",
|
||||
"pinnedPeerCertSha256Tip": "SHA-256-хеши сертификата пира в кодировке Base64. Только для панели — не записывается в конфиг xray сервера, но включается в ссылки-приглашения, чтобы клиенты могли закрепить сертификат.",
|
||||
"pinnedPeerCertSha256Placeholder": "Base64-хеш(и), через запятую",
|
||||
"pinnedPeerCertSha256Tip": "SHA-256-хеши сертификата пира в виде шестнадцатеричной строки (напр. e8e2d3…), через запятую. Только для панели — не записывается в конфиг xray сервера, но включается в ссылки-приглашения, чтобы клиенты могли закрепить сертификат.",
|
||||
"pinnedPeerCertSha256Placeholder": "шестнадцатеричный хеш(и), через запятую",
|
||||
"generateRandomPin": "Сгенерировать случайный хеш",
|
||||
"getNewEchCert": "Получить новый ECH-сертификат",
|
||||
"show": "Показать",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH yapılandırması",
|
||||
"pinnedPeerCertSha256": "Sabitlenmiş Peer Sertifikası SHA-256",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "base64 hash(ler), virgülle ayrılmış",
|
||||
"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.",
|
||||
"pinnedPeerCertSha256Placeholder": "onaltılık (hex) hash(ler), virgülle ayrılmış",
|
||||
"generateRandomPin": "Rastgele hash üret",
|
||||
"getNewEchCert": "Yeni ECH sertifikası al",
|
||||
"show": "Göster",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH config",
|
||||
"pinnedPeerCertSha256": "Закріплений SHA-256 сертифіката пира",
|
||||
"pinnedPeerCertSha256Tip": "SHA-256-хеші сертифіката пира в кодуванні Base64. Лише панель — не записується в конфіг xray сервера, але додається до посилань спільного доступу, щоб клієнти могли закріпити сертифікат.",
|
||||
"pinnedPeerCertSha256Placeholder": "Base64-хеш(і), через кому",
|
||||
"pinnedPeerCertSha256Tip": "SHA-256-хеші сертифіката пира у вигляді шістнадцяткового рядка (напр. e8e2d3…), через кому. Лише панель — не записується в конфіг xray сервера, але додається до посилань спільного доступу, щоб клієнти могли закріпити сертифікат.",
|
||||
"pinnedPeerCertSha256Placeholder": "шістнадцятковий хеш(і), через кому",
|
||||
"generateRandomPin": "Згенерувати випадковий хеш",
|
||||
"getNewEchCert": "Отримати новий ECH-сертифікат",
|
||||
"show": "Показати",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "Cấu hình ECH",
|
||||
"pinnedPeerCertSha256": "SHA-256 chứng chỉ peer đã ghim",
|
||||
"pinnedPeerCertSha256Tip": "Hash SHA-256 mã hóa Base64 của chứng chỉ peer. Chỉ panel — không ghi vào cấu hình xray máy chủ, nhưng được đưa vào liên kết chia sẻ để client có thể ghim chứng chỉ.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash base64, phân tách bằng dấu phẩy",
|
||||
"pinnedPeerCertSha256Tip": "Hash SHA-256 của chứng chỉ peer dưới dạng chuỗi thập lục phân (vd. e8e2d3…), phân tách bằng dấu phẩy. Chỉ panel — không ghi vào cấu hình xray máy chủ, nhưng được đưa vào liên kết chia sẻ để client có thể ghim chứng chỉ.",
|
||||
"pinnedPeerCertSha256Placeholder": "hash thập lục phân, phân tách bằng dấu phẩy",
|
||||
"generateRandomPin": "Tạo hash ngẫu nhiên",
|
||||
"getNewEchCert": "Lấy chứng chỉ ECH mới",
|
||||
"show": "Hiện",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH 配置",
|
||||
"pinnedPeerCertSha256": "固定对端证书 SHA-256",
|
||||
"pinnedPeerCertSha256Tip": "对端证书的 Base64 编码 SHA-256 哈希。仅面板使用 — 不写入服务器的 xray 配置,但会包含在分享链接中,以便客户端固定证书。",
|
||||
"pinnedPeerCertSha256Placeholder": "base64 哈希,逗号分隔",
|
||||
"pinnedPeerCertSha256Tip": "对端证书的 SHA-256 哈希(十六进制字符串,如 e8e2d3…),逗号分隔。仅面板使用 — 不写入服务器的 xray 配置,但会包含在分享链接中,以便客户端固定证书。",
|
||||
"pinnedPeerCertSha256Placeholder": "十六进制哈希,逗号分隔",
|
||||
"generateRandomPin": "生成随机哈希",
|
||||
"getNewEchCert": "获取新 ECH 证书",
|
||||
"show": "显示",
|
||||
|
||||
@@ -555,8 +555,8 @@
|
||||
"echKey": "ECH key",
|
||||
"echConfig": "ECH 設定",
|
||||
"pinnedPeerCertSha256": "釘選對端憑證 SHA-256",
|
||||
"pinnedPeerCertSha256Tip": "對端憑證的 Base64 編碼 SHA-256 雜湊。僅面板使用 — 不寫入伺服器的 xray 設定,但會包含在分享連結中,以便用戶端釘選憑證。",
|
||||
"pinnedPeerCertSha256Placeholder": "base64 雜湊,以逗號分隔",
|
||||
"pinnedPeerCertSha256Tip": "對端憑證的 SHA-256 雜湊(十六進位字串,如 e8e2d3…),以逗號分隔。僅面板使用 — 不寫入伺服器的 xray 設定,但會包含在分享連結中,以便用戶端釘選憑證。",
|
||||
"pinnedPeerCertSha256Placeholder": "十六進位雜湊,以逗號分隔",
|
||||
"generateRandomPin": "產生隨機雜湊",
|
||||
"getNewEchCert": "取得新 ECH 憑證",
|
||||
"show": "顯示",
|
||||
|
||||
Reference in New Issue
Block a user