Chyba šifry TLS u OpenVPN: nejdřív porovnejte obě strany
Chyba „žádná společná šifra“ patří ke kontrolnímu kanálu TLS, ne k data-ciphers. Nejdřív porovnejte verze, pak seznamy sad a pak dokažte vyjednávání.
Chyba „žádná společná šifra“ zní jako jedno nastavení, které je třeba změnit, a nastavení, které většina lidí mění, je to špatné. OpenVPN drží oddělené politiky pro kontrolní kanál, který provádí TLS handshake, a pro datový kanál, který přenáší pakety uvnitř tunelu, a chyba jmenuje první, zatímco lidé upravují druhý. Porovnání toho, co každá strana povoluje, ve správném pořadí, mění hádání ve dvě nebo tři rozhodnutí: verze, pak seznam sad, pak přihlašovací údaje.
Spletete-li toto pořadí, můžete strávit hodinu přidáváním názvu AES do seznamu, který se nikdy nečetl.
Dva seznamy šifer a jen jeden rozbíjí handshake
Kontrolní kanál vyjednává relaci TLS a jeho politika se zapisuje pomocí tls-cipher pro TLS 1.2 a tls-ciphersuites pro TLS 1.3. Datový kanál se nastavuje zvlášť pomocí data-ciphers, kde neshoda vytvoří spojení, které se naváže a pak nedokáže propustit provoz. Oba produkují chyby, které zmiňují šifry, a proto se pletou. Handshake, který se nikdy nedokončí, ukazuje na kontrolní kanál, zatímco navázaný tunel, který zahazuje pakety, ukazuje na datový kanál.
Čtěte celou zprávu, ne první řádek. Neshoda verzí, chybějící sada, algoritmus podpisu certifikátu, který strana odmítá, a selhání ověření názvu hostitele končí všechny chybou TLS a jen jedna z nich se týká vašeho seznamu sad. Rozlišení těchto kategorií je většina diagnózy.
Porovnejte verze dřív, než porovnáte sady
Strana omezená na TLS 1.2 a strana vyžadující 1.3 nesdílejí žádnou verzi a žádný řetězec šifer to nepřemostí. Zapište tls-version-min a tls-version-max na obou stranách, nebo výchozí hodnoty použitých sestavení, protože politika OpenSSL v distribuci může zvýšit minimum, aniž by to nějaká volba OpenVPN řekla. Pokud je jedna strana zařízení nebo klient třetí strany, její okno je to, co dovolí její firmware. Porovnání sad má smysl až tehdy, když se okna překrývají.
Tyto záznamy by měly uvádět i skutečné binárky. Příkazový openvpn na vašem notebooku nemusí být klient, který obsluhuje importovaný profil.
Seznamy pro TLS 1.2 a TLS 1.3 se nemíchají
Názvy sad pro TLS 1.2 vypadají jako ECDHE-RSA-AES256-GCM-SHA384 a patří do tls-cipher, který přijímá řetězec šifer OpenSSL. Sady TLS 1.3 se jmenují jako TLS_AES_256_GCM_SHA384 a patří do tls-ciphersuites; přidání jedné do řetězce pro 1.2 nenastaví seznam pro 1.3 a parser může text přijmout, aniž by ho kdy porovnal. Filtr správný pro jednu verzi neříká nic o druhé. Zapište, pro kterou verzi je který seznam určen.
openvpn --show-tls vypíše, co místní sestavení podporuje, a to je inventář, ne slib: vzdálená strana nemusí tyto sady povolovat a aktivní profil je nemusí zapínat. Použijte ho k vyloučení sestavení, které žádnou sadu nabídnout nemůže, a pak porovnejte nakonfigurované seznamy.
Dokažte vyjednávání na novém spojení
Úspěšný handshake je jediný důkaz, který se počítá, a musí přijít od skutečného klienta se skutečným profilem. Zvyšte podrobnost serveru, připojte se jednou a přečtěte z logu vyjednanou verzi protokolu a sadu, místo abyste předpokládali, že vyhrála první nabídnutá hodnota. Potom zvlášť potvrďte datový kanál provozem přes tunel, protože funkční handshake a selhávající datový kanál jsou různé opravy. Opakujte po každé změně konfigurace, protože zastaralý profil klienta je častý falešně negativní výsledek.
Pokud neexistuje schválená společná konfigurace, odpovědí je upgrade nebo plán migrace, ne oslabená politika. Snížení tls-version-min, vypnutí ověřování nebo zapnutí všech starších sad odstraní odmítnutí, aniž by splnilo bezpečnostní požadavek, který ho vyvolal.
Zapište vyjednanou verzi, sadu a datovou šifru do tiketu změny. Další člověk, který narazí na chybu TLS, začne od tohoto záznamu, ne od řetězce šifer nalezeného v příspěvku na fóru.