TLS putuje unutar kontrolnog kanala, a ne cijelim tunelom
Peerovi razmjenjuju vlastite pakete, a TLS radi unutar kontrolne razmjene. Proxy koji razumije HTTPS nema pojma šta je ovaj saobraćaj.
Vidjeti riječ TLS u opisu VPN-a i zaključiti da će web proxy razumjeti saobraćaj čest je prečica. Unutar ovog protokola peerovi razmjenjuju vlastite pakete, a TLS radi kao dio jednog kanala unutar te razmjene. Korisni teret koji korisnika zanima putuje u drugom formatu poruka, zbog čega se njih dvoje nikada ne poklapaju s običnom HTTPS sesijom.
Omotnica dolazi prva
Svaki paket tunela počinje vlastitim zaglavljem protokola: tipom poruke, identifikatorom ključa i, na transportu bajtovnog toka, prefiksom dužine koji označava gdje paket završava. Čitalac koji ne parsira tu omotnicu ne može znati gdje počinje sljedeće polje.
outer transport (UDP datagram or TCP stream)
-> OpenVPN header (opcode, key id, length where needed)
-> control message (reliability wrapper, TLS exchange)
-> data message (protected inner packet)
Ta skica je mapa, a ne bajt-tabela, jer tačna polja zavise od tipa poruke, iako prvi oktet uvijek zajedno pakuje opkod i identifikator ključa. Pogađanje tipa poruke iz broja porta je način na koji dekoderi završe s pogrešnim imenovanjem onoga što vide. Redoslijed je ono što je važno za dijagnostiku: transport, zatim omotnica protokola, zatim jedna od dvije vrste posla. Pročitajte omotnicu prije nego što stvorite bilo kakvo mišljenje o onome što slijedi. Dekoder koji počne na pogrešnom mjestu proizvodi samouvjerenu besmislicu.
Sloj pouzdanosti pripada protokolu
Kontrolne poruke trebaju uređenu, potvrđenu dostavu, a protokol to sam osigurava potvrdama i ponovnim prijenosima. Potvrda može stići kao vlastita poruka ili putovati s drugom kontrolnom porukom, što čini tragove nepravilnim svakome ko očekuje jednu čistu razmjenu.
Korist je da TLS rukovanje dobija pouzdan nosač čak i kada je vanjski transport UDP. Cijena je da jedan datagram može sadržavati samo dio tog razgovora, pa tretiranje njega kao samostalnog TLS zapisa proizvodi besmislicu. Ponovno sastavljanje mora se dogoditi na sloju protokola. Zato snimljeni paket rijetko izgleda kao kompletan korak rukovanja.
Prebacivanje vanjskog transporta na TCP ne uklanja ovaj sloj. Pouzdan transport znači manje ponovnih prijenosa na nivou protokola, a ne da okvirivanje nestaje ili da saobraćaj postaje HTTP.
Data paketi koriste drugačiji format
Kada sesija postoji, korisni teret dolazi kao data poruke koje nose unutrašnje IP pakete ili Ethernet okvire. Zaštićeni su vlastitim ključevima i vlastitom obradom, i nisu TLS aplikacijski zapisi ni u jednom smislu koji bi TLS biblioteka prihvatila.
Ta podjela je vidljiva u konfiguraciji: kontrolni kanal i data kanal imaju odvojena podešavanja šifre, pa linija dnevnika koja imenuje jedan ne govori ništa o drugom. Čitanje jake kontrolne šifre kao dokaza jake data šifre česta je greška u izvještavanju.
Držite i srodnu zabludu izvan objašnjenja. TLS nije kanal s javnim ključem koji stoji uz simetrični data kanal, jer TLS sam štiti svoje zapise simetrično nakon uspostavljanja ključeva. Prava razlika je uloga i format paketa, a ne koju vrstu kriptografije koristi koja strana.
Zašto HTTPS proxy ne može pomoći
Proxy koji terminira TLS očekuje tok TLS zapisa i zatim aplikacijski protokol unutar njega. Kontrolni kanal ovog protokola nosi se unutar vlastitog okvirivanja sa slojem pouzdanosti oko njega, pa proxy koji terminira čita to okvirivanje kao oštećeni ulaz.
Transparentni prosljeđivač koji propušta bajtove ili datagrame bez tumačenja može raditi, pod uslovom da ne prepisuje ili ponovo sastavlja tok. Pitanje koje treba postaviti o bilo kojem posredniku jeste da li prosljeđuje stvarni transport i okvirivanje, a ne da li negdje podržava TLS. Pitajte to prije nego što potrošite veče na proxy pravila. Većina neuspjeha ovdje je arhitektonska, a ne nedostajuće podešavanje.
Ispravno čitanje traga
Očekujte prvo kontrolnu razmjenu, zatim mnogo veći broj data poruka, oboje na jednom transportu. Ako se kontrolna faza završi, a data faza zastane, kvar se tiče ključeva, rutiranja ili filtriranja data puta, a ne rukovanja. Snimite nekoliko data poruka i provjerite da li uopšte napuštaju klijenta. To jedno zapažanje dijeli pretragu na pola.
Historijski opisi metoda ključeva u dokumentaciji protokola ne impliciraju da dati izlaz još uvijek podržava svaki stari format. Provjerite verziju koju pokrećete prije nego što izgradite očekivanje na pasusu koji opisuje kako su stvari nekada radile.