@umutbayraktar;
Hocam, kaynak kodu inceleyip Türk Telekom altyapısı üzerinde test ettim. Bulduklarım ve önerilerim, önem sırasına göre:
1. Sertifika hatasının sebebi: DNS koruması varsayılan olarak kapalı
Türk Telekom DNS'i discord.com, discord.gg, roblox.com, wattpad.com ve pastebin.com için engelleme sunucusu olan 195.175.254.2'yi döndürüyor. ERR_CERT_AUTHORITY_INVALID hatası oradan geliyor. Bu hatta SNI engeli yok: gerçek IP'ye motor olmadan bağlanınca discord.com 200 dönüyor. Yani Türkiye'de asıl gereken DNS koruması. Ama electron/engine-manager.js'de
useDoh: s.dnsProtection === true yazıyor ve arayüzde de varsayılan değer false. Varsayılan olarak açık gelmeli.
2. "DoH" aslında şifresiz DNS
core/src/doh.c, 1.1.1.1 ve 8.8.8.8 gibi sunuculara düz UDP/53 ile soruyor. doh.h'deki "TLS üzerinden DoH" açıklaması kodla uyuşmuyor. Operatör UDP/53'ü ele geçirirse koruma çöker (2014'te 8.8.8.8 için yapılmıştı). Önerim: Electron ana sürecinde 127.0.0.1 üzerinde çalışan küçük bir UDP→DoH yönlendirici (RFC 8484,
https://1.1.1.1/dns-query ve
https://8.8.8.8/dns-query). Sunuculara IP ile bağlanınca SNI gönderilmiyor. Sertifikalar bu IP'leri içerdiği için doğrulama da eksiksiz yapılıyor. Motor önce bu yönlendiriciye sorar, cevap gelmezse mevcut UDP çözücülere düşer. Denedim, çalışıyor.
3. Engelleme sayfası filtresi yok
CAPABILITIES.md "bilinen engelleme sayfası adreslerini eliyoruz" diyor, ama doh.c sadece özel ve ayrılmış IP'leri eliyor. 195.175.254.2 listeye eklenmeli. Ayrıca en sondaki getaddrinfo yedeği bu adresi döndürürse reddedilmeli, yoksa yine sertifika hatası çıkıyor.
4. Bütün trafik proxy'den geçiyor; e-Devlet ve banka sitelerinde sorun çıkabiliyor
PAC her şeyi SOCKS'a gönderiyor, ayrıca ProxyServer=socks=... da ayarlanıyor. Önerim "sadece listedeki siteler" modunun varsayılan olması: PAC'teki alan adı listesi (alt alan adları dahil) SOCKS'a, geri kalan her şey DIRECT. Bu modda ProxyServer ve ProxyEnable'a hiç dokunmadan sadece AutoConfigURL ayarlanır. Liste kullanıcı tarafından düzenlenebilmeli, "tüm trafik" de seçenek olarak kalabilir.
5. Sesli sohbet: önceki EDİT'teki "UDP desteği" yorumumu düzeltiyorum
SOCKS5'e UDP ASSOCIATE eklemek işe yaramaz. Discord (Chromium/WebRTC) ses UDP'sini proxy'den geçirmiyor, Shroudly açık da olsa kapalı da olsa doğrudan gönderiyor. discord.media bu hatta DNS'te engelli değil ve doğrudan açılıyor. Arada çıkan "RTC Bağlanıyor" ve "Rota Yok" sorununun sebebi henüz belli değil, araştırılması gerekiyor. Ayırt etmek için şöyle denenebilir: Shroudly kapalıyken Windows'un kendi DNS şifrelemesini açıp (Ayarlar → Ağ → DNS over HTTPS, 1.1.1.1) Discord'da sesi denemek. Orada da oluyorsa sorun operatörün UDP tarafındadır. Olmuyorsa Shroudly tarafındadır, örneğin ses sunucusunun WebSocket bağlantısı motordan geçerken.
6. Otomatik güncelleme imzasız exe'yi kendiliğinden kuruyor
updater.js güncellemeyi indirip 60 saniye sonra kendisi kuruyor. Kod imzası olmadığı için electron-updater Windows'ta imza doğrulaması yapamıyor. Elinde sadece latest.yml'deki SHA-512 var, o da güncellemeyle aynı yerden geliyor. GitHub hesabı ele geçirilirse bütün kullanıcıların bilgisayarında otomatik olarak kod çalıştırılabilir. Önerim: varsayılan olarak "sadece bildir" (yeni sürümün kod değişikliklerine giden linkle birlikte) ya da kod imzalama. SignPath Foundation açık kaynak projelere ücretsiz imza veriyor, SmartScreen uyarısını da çözüyor.
7. Electron 33 artık güvenlik güncellemesi almıyor
Electron 43.7.5 ve electron-builder 26.15.3 ile denedim. Pencere, proxy, bildirim ve kurulum sorunsuz çalıştı. Ayrıca electron-store → ajv → fast-uri zincirinde yüksek seviyeli bir açık var,
npm audit fix ile kapanıyor.
8. Site testi DNS engelini görmüyor
DNS koruması açıkken test, adı DoH ile çözdüğü için DNS ile engellenen sitelere "burada engelli değil" diyor. Test, sistem DNS'inin cevabını şifreli cevapla karşılaştırmalı (ya da engelleme sayfası IP'sine bakmalı) ve "DNS ile engelli" diye ayrı bir sonuç vermeli.
9. Küçük öneriler- İlk açılışta kısa bir açıklama ve "Discord'u test et" butonu, kullanıcıların sorularının çoğunu çözer. Buton sistem proxy ayarıyla gerçek bir istek atıp sonucu göstermeli.
- Portable sürüm eklenirse: electron-builder'ın varsayılan unpackDirName ayarıyla, ikinci açılış çalışan kopyanın klasörünü silmeye çalışıyor. portable.unpackDirName: true gerekli. Otomatik başlatma ve RunOnce yolu için de process.env.PORTABLE_EXECUTABLE_FILE kullanılmalı.
@bnsware; eline sağlık hocam, kodu bu kadar ciddiye alıp TT üzerinde test etmen çok değerli. Çoğunu haklı buldum, hepsini elden geçirdim; yeni sürümde (v2.2.1) şöyle:
1 — DNS koruması artık varsayılan açık. Zaten asıl mesele buymuş, teşhisin doğru.
2 — Haklısın, "DoH" düz UDP'ydi. Tam senin önerdiğin gibi yaptım: ana süreçte 127.0.0.1'de bir DoH yönlendirici, IP ile ve SNI'siz, sertifika doğrulamalı (RFC 8484). Motor önce ona soruyor, cevap gelmezse eski UDP çözücülere düşüyor.
3 — 195.175.254.2 artık eleniyor, en sondaki getaddrinfo yedeğinde de reddediliyor. Doc'taki yanlış ifadeyi de düzelttim.
4 — "Sadece listedeki siteler" modunu ekledim ve varsayılan yaptım; listedekiler (alt alan adları dahil) proxy'den, gerisi DIRECT. Liste düzenlenebiliyor, "tüm trafik" seçeneği duruyor. Windows'ta bu modda ProxyServer'a dokunmuyor, sadece AutoConfigURL.
5 — Düzeltmen doğru, UDP ASSOCIATE işe yaramaz, ses zaten proxy'den geçmiyor. "RTC Bağlanıyor" olayını deneyenlerle ayrıca kovalayacağız; senin DNS-over-HTTPS'le ayırma yöntemini deneyeceğim.
7 — Electron 43'e geçtim, fast-uri açığı kapandı. (Bir de electron-updater'ın js-yaml'ini güncelledim, audit artık temiz.)
8 — Site testi artık sistem DNS'i engelleme IP'si döndürüyorsa "DNS ile engelli ama çözüldü" diyor.
9 — İlk açılışta kısa açıklama notu ekledim; site testi zaten vardı.
6 — En kritik uyarın bu, haklısın. Kalıcı çözüm kod imzalama; SignPath Foundation'a başvuruyorum, kabul edilince Windows derlemeleri imzalı çıkacak (CI'ı da ona göre kurdum). O gelene kadar davranışı değiştirmedim ama akılda.
Tekrar sağ ol, bu seviyede inceleme az bulunur. Takıldığın başka yer olursa yaz.