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 seeWhat it rules outNext check
Authentication error before any certificate is sentThe data channel is irrelevant; the control channel never authenticatedCompare tls-auth and its direction on both ends
Certificate or handshake failure after the control channel authenticatesThe shared key and its direction already agreeCheck the CA, the certificate dates and the hostname
Session completes but throughput or cipher warnings appearDirection was never the problemCompare the data-channel cipher settings
Startup stops on an options errorThe number itself is not the issueRe-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.

Povezani članci