Trys skirtingi faktai suspaudžiami į vieną eilutę daugumoje OpenVPN TLS diskusijų: ką gali jūsų kliento kompiliacija, ką leidžia profilis ir dėl ko sesija iš tikrųjų susitarė. Trumpas TLS 1.3 rinkinių sąrašas atsako tik pusiau į vidurinį klausimą ir nieko nesako apie protokolo versijos apatinę ribą. Atlikite toliau pateiktus patikrinimus iš eilės ir sustokite ties pirmuoju, kuris nepasitvirtina, nes kiekvienas vėlesnis patikrinimas daro prielaidą, kad ankstesni jau sutvarkyti.

Patikrinkite kompiliaciją prieš skaitydami bet kokį sąrašą

Konfigūracijos direktyva negali pridėti protokolo palaikymo dvejetainei bylai, kuri jo neturi. Pradėkite nuo versijos reklaminės juostos, kuri nurodo sukompiliuotą kriptografijos biblioteką:

openvpn --version

2.6 kompiliacija, susieta su OpenSSL, priima ir tls-cipher, ir tls-ciphersuites. Kompiliacija su mbed TLS visiškai neturi TLS 1.3 rinkinių pasirinkimo, o 2.6 vadovas tls-ciphersuites žymi kaip OpenSSL parinktį. Jei serveris perkompiliuojamas su kitu backend, tas pats profilis gali pakeisti elgseną nepakeitus nė vienos konfigūracijos eilutės.

Kol esate čia, paleiskite openvpn --show-tls ir išsaugokite išvestį. Tai inventoriaus sąrašas, su kuriuo vėliau lyginsite, ir jį užfiksuoti pigu prieš kam nors pradedant redaguoti profilius.

Įrašykite reklaminę juostą ir sąrašą į pakeitimo bilietą, o ne į pokalbių langą. Kai du žmonės ginčijasi, ar klientas po šešių savaičių galės pasiūlyti rinkinį, užfiksuota išvestis tai išsprendžia viena eilute.

Laikykite versijų ribas atskirai nuo šifrų sąrašų

2.6 vadove tai trys valdikliai, o ne vienas:

  • tls-cipher nustato šifrų politiką TLS 1.2 ir senesnėms versijoms ir perduodamas OpenSSL šifrų sąrašui;
  • tls-ciphersuites pasirenka TLS 1.3 rinkinius;
  • tls-version-min ir tls-version-max apriboja protokolo versijas, kurias jungtis gali naudoti.

Taigi kruopščiai pakirptas TLS 1.3 rinkinių sąrašas nieko neįrodo apie tai, kad senesnė versija vis dar leidžiama. Jei reikalavimas yra „tik TLS 1.3“, jį neša versijos apatinė riba, o rinkinių sąrašas tik susiaurina pasirinkimus toje riboje:

tls-version-min 1.3
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

Ši pora atlieka du darbus. Ištrynus vieną eilutę, kita įtvirtina mažiau, nei manote, ir būtent tai yra gedimas, kuriam sugauti egzistuoja visas šis patikrinimas.

Duomenų kanalas yra ketvirtas valdiklis. data-ciphers derasi dėl simetrinio šifro tunelio viduje, ir jo rezultatas nieko nesako apie valdymo kanalo TLS versiją. AES-256-GCM matymas sesijos suvestinėje nėra TLS 1.3 įrodymas nei viena kryptimi.

Skaitykite show-tls kaip vietinį inventorių

--show-tls išvardija rinkinius, kuriuos palaiko kriptografijos biblioteka, su kuria susieta ši dvejetainė byla, prioriteto tvarka. Tai nėra ataskaita iš šliuzo. Vadovas aiškiai sako, kad sąrašas ateina iš vietinės bibliotekos, o tai reiškia, kad nešiojamasis kompiuteris su OpenSSL 3.x ir maršrutizatorius su senesne kompiliacija išspausdins skirtingus sąrašus, nors kalba su tuo pačiu serveriu.

EvidenceWhat it actually describes
--show-tls outputCapabilities of this client build and its library
Profile directivesWhat this attempt is allowed to offer
Session log lineWhat this one negotiation selected

Tarkime, klientas palaiko rinkinius A, B ir C, o viena sesija pasirenka B. Tai nieko nenustato apie tai, ar serveris leidžia A ar C, nei apie tai, ar B yra vienintelis leidžiamas pasirinkimas. Laikykite tris eilutes atskirai, ir dauguma painių TLS temų išsispręs pačios.

Vis dėlto inventorių verta saugoti. Kai sesija nepavyksta, bibliotekos sąrašo palyginimas su profilio sąrašu parodo, ar klientas apskritai turėjo galimybę pasiūlyti tai, ko norėjo serveris. Tai taip pat parodo, ar backend pakeitimas tyliai nepašalino TLS_CHACHA20_POLY1305_SHA256 iš telkinio, kuriuo remiasi senesni klientai — tokio tipo regresija, kuri pasireiškia kaip saujelė naudotojų, negalinčių prisijungti, kol visi kiti nieko nepastebi.

Paklauskite šliuzo to, į ką jis gali atsakyti

Jei administruojate paslaugą, patikrinkite veikiančios instancijos faktinę konfigūraciją, o ne failą diske. OpenVPN galėjo būti paleistas su kitu --config keliu, gali traukti įtrauktis ir galėjo būti nepaleistas iš naujo po pakeitimo. Klientai susiduria su veikiančio demono politika.

Jei neadministruojate, paprašykite operatoriaus palaikomų kliento reikalavimų arba apibrėžto priėmimo testo. Atmestas bandymas nėra automatiškai atmestas rinkinys: versijos apatinė riba, sertifikato tapatybės patikros, tokios kaip remote-cert-tls, arba tls-auth ir tls-crypt neatitikimas gali užbaigti mainus dar prieš rinkinio pasirinkimui tampant svarbiam. Perskaitykite serverio klaidą prieš keisdami kliento sąrašą, nes „handshake failed“ apima keturias skirtingas priežastis, ir tik viena iš jų yra šifro neatitikimas.

openssl s_client nukreipimas į VPN portą taip pat neatkuria klausimo. Valdymo kanalas veikia OpenVPN vidiniame kadravime, todėl neapdorotas TLS zondas tikrina kitą protokolą prievarte, kuris tikisi kažko kito. Bet kokia iš to padaryta išvada yra apie zondą, o ne apie tunelį.

Užrašykite du rezultatus ir laikykite juos atskirai

Nauja leidžiama sesija sukuria valdymo kanalo eilutę, kurioje nurodoma protokolo versija ir pasirinktas šifras, ir atskirą duomenų kanalo eilutę, kurioje nurodomas tunelio šifras. Užfiksuokite abi su kliento versija ir profilio pavadinimu, ir pažymėkite, kuri serverio instancija atsakė:

openvpn --config office.ovpn --verb 4 2>&1 | tee session.txt

Tada skaitykite tas dvi eilutes iš to failo, o ne iš atminties. Pora yra įrodymas; vien rinkinio pavadinimas yra preferencija, o versijos riba yra atskiras teiginys apie tai, ko serveris atsisako.

Atlikite patikrinimus šia tvarka. Patvirtinkite kompiliaciją ir backend naudodami --version. Užfiksuokite --show-tls prieš ką nors keisdami. Nurodykite reikiamą versijos apatinę ribą atskirai nuo rinkinių sąrašo. Patvirtinkite veikiančios instancijos faktinę politiką su jos savininku. Stebėkite vieną leidžiamą sesiją ir, jei planas leidžia, vieną atmestą bandymą su senesne versija. Užrašykite valdymo ir duomenų kanalų rezultatus kaip atskirus radinius.

Jei reikalingas klientas negali atitikti naujo minimumo, priimkite tą migracijos ar išimties sprendimą aiškiai, o ne tyliai sumažinkite nesusijusią priėmimo taisyklę, kad diegimas atrodytų baigtas.

Susiję straipsniai