tls-auth key-direction: 0 i 1 moraju se razlikovati, a ne poklapati
Uz tls-auth dvije strane trebaju suprotne smjerove, 0 i 1, ili obje moraju izostaviti postavku. Isti broj ne uspijeva, a tls-crypt ga nikad ne koristi.
Jedna strana tunela potpisuje kontrolni kanal ključnim slotom koji druga strana nikad ne provjerava, i veza umire s greškom autentifikacije prije nego što se razmijeni i jedan certifikat. Tako izgleda nesklad smjera kod tls-auth, i on je deterministički: ista dva fajla ne uspijevaju pri svakom pokušaju, iz svake mreže. Ništa u zapisu ne imenuje opciju koju tražite, zato ljudi ponovo grade ključeve i izdaju certifikate koji nikad nisu bili pokvareni. Rješenje je učiniti dvije strane komplementarnim ili ostaviti obje dvosmjerne, a ne oslabiti provjeru.
Neuspjeh nastupa prije certifikata
Uz tls-auth oba partnera drže isti zajednički ključ i svaki koristi jedan od dva slota izvedena iz njega: jedan slot potpisuje odlazne kontrolne pakete, drugi provjerava dolazne. Smjer 0 i smjer 1 dodjeljuju te uloge obrnutim redoslijedom, pa par mora biti komplementaran da bi se HMAC provjere poklopile. Kad se dodjela obrne na jednoj strani, primalac traži potpis u pogrešnom slotu i odbija paket. Sesija tu završava, zato se greška tiče autentifikacije paketa, a ne nečega što bi proizvelo spremište certifikata.
Determinizam je važan za dijagnostiku, jer problem s vremenom ili putanjom ostavlja drugačiji trag: isprekidani prekidi, otkazivanje jednog smjera ili sesija koja umire samo na određenoj mreži. Nesklad smjera pada na prvom rukovanju svaki put, i pada jednako na drugom računaru s ista dva fajla. Čitajte zapis pri --verb 4 i pronađite prvi odbijeni paket umjesto zadnjeg reda. Ako se to odbijanje dogodi prije bilo kakve razmjene certifikata, zajednički ključ i njegov smjer su dvije stvari koje vrijedi provjeriti.
| What you see | What it rules out | Next check |
|---|---|---|
| Authentication error before any certificate is sent | The data channel is irrelevant; the control channel never authenticated | Compare tls-auth and its direction on both ends |
| Certificate or handshake failure after the control channel authenticates | The shared key and its direction already agree | Check the CA, the certificate dates and the hostname |
| Session completes but throughput or cipher warnings appear | Direction was never the problem | Compare the data-channel cipher settings |
| Startup stops on an options error | The number itself is not the issue | Re-read the inline versus external directive syntax |
Gdje broj živi
Priručnik OpenVPN 2.6 dokumentuje dva mjesta za smjer: drugi argument tls-auth kad ključ stoji u zasebnom fajlu, i samostalan red key-direction kad je ključ ugrađen u profil. Oba postavljaju istu vrijednost, pa profil treba koristiti jedan oblik ili drugi, nikad oba. Izostavljanje je također izbor, i ono stavlja oba partnera u dvosmjerni raspored koji radi kad nijedna strana ne navede smjer. Dva partnera s istim brojem nisu u tom rasporedu: svaki očekuje da potpisuje u jednom slotu i provjerava u drugom, i oba to rade na isti način.
# server.conf, external key tls-auth ta.key 0 # client.ovpn, external key tls-auth ta.key 1 # client.ovpn, inline key key-direction 1
Ugrađeni oblik je direktiva u zasebnom redu, a ne atribut na početnoj oznaci ključnog bloka, i dodavanje argumenta toj oznaci je greška, a ne promjena smjera. Položaj je također važan: direktiva stoji izvan bloka kojem pripada, pa se vrijednost napisana unutar bloka čita kao ključni materijal. Kopirajte raspored koji je distributer profila namjeravao umjesto da izmišljate par, jer profil koji radi prema jednom serveru možda je već preslikan na drugoj strani.
Šta opcija ostavlja na miru
Ona ne šifruje aplikacijski saobraćaj. tls-auth stavlja HMAC oko paketa kontrolnog kanala, dok je podatkovni kanal zaštićen sesijskim ključevima dogovorenim tijekom rukovanja, pa pitanje propusnosti ili šifre nema nikakve veze s brojem smjera. Postavka također ne dodaje drugi sloj šifriranja, i upravo ta pretpostavka šalje ljude u potragu za dužim ključem.
Ne primjenjuje se na tls-crypt, drugi mehanizam kontrolnog kanala s vlastitim opcijama i rukovanjem ključevima, i ne govori ništa o identitetu certifikata bilo koje strane. Radni sklad smjera zato dokazuje samo da se dvije strane slažu kako autentificirati kontrolni kanal, a ne da je lanac povjerenja validiran.
Poravnajte par, pa se ponovo povežite
Usporedite dvije konfiguracije prije nego promijenite ijednu, jer uređivanje strane koja je već bila ispravna udvostručuje posao. Grep ispod pokazuje koji mehanizam bira svaki fajl; detaljno pokretanje pokazuje je li se kontrolni kanal uopće autentificirao. Sačuvajte oba izlaza, da se sljedeća promjena može uporediti s poznatim stanjem.
grep -n -E 'tls-auth|tls-crypt|key-direction' server.conf client.ovpn openvpn --config client.ovpn --verb 4 2>&1 | grep -i -E 'hmac|tls error|control channel'
Ponovo pokrenite oba partnera nakon svake promjene, jer se ove opcije čitaju jednom pri pokretanju i ponovno učitavanje jedne strane ostavlja par nedosljednim za cijeli život starije sesije. Ako implementacija trenutno radi bez konfiguriranog smjera, dodavanje postavke na jednog partnera reproducira neuspjeh s kojim ste počeli; ili ostavite oboje ili konfigurirajte oboje. Mijenjajte jedan kraj po jedan i čuvajte prethodni fajl, da regresija bude dvominutni povratak, a ne ponovna izgradnja.
Zabilježite mehanizam, ključni fajl i smjer za svaki kraj u bilješke o implementaciji, jer će inače sljedeća osoba pročitati dva slična fajla i pretpostaviti da se brojevi trebaju poklapati. Smjer je detalj koordinacije, a ne sigurnosna nadogradnja: razdvaja dva smjera kontrolnog kanala i ne čini ništa drugo.