Trei fapte diferite sunt reduse la o singură linie în majoritatea discuțiilor OpenVPN despre TLS: ce poate face compilarea clientului tău, ce permite profilul și ce a negociat de fapt sesiunea. O listă scurtă de suite TLS 1.3 răspunde doar pe jumătate la întrebarea din mijloc și nu spune nimic despre pragul inferior al versiunii protocolului. Parcurge verificările de mai jos în ordine și oprește-te la prima care nu rezistă, pentru că fiecare verificare ulterioară presupune că cele anterioare sunt rezolvate.

Verifică compilarea înainte de a citi orice listă

O directivă de configurare nu poate adăuga suport de protocol unui binar care nu îl are. Începe cu bannerul de versiune, care numește biblioteca criptografică compilată:

openvpn --version

O compilare 2.6 legată de OpenSSL acceptă atât tls-cipher, cât și tls-ciphersuites. O compilare cu mbed TLS nu are deloc selecție de suite TLS 1.3, iar manualul 2.6 marchează tls-ciphersuites ca opțiune OpenSSL. Dacă serverul este recompilat cu alt backend, același profil poate să își schimbe comportamentul fără ca o singură linie de configurare să se schimbe.

Cât timp ești aici, rulează openvpn --show-tls și păstrează ieșirea. Este inventarul cu care vei compara mai târziu, și este ieftin să îl capturezi înainte ca cineva să înceapă să editeze profiluri.

Scrie bannerul și lista în tichetul de modificare, nu într-o fereastră de chat. Când doi oameni se ceartă dacă un client va putea oferi o suită peste șase săptămâni, ieșirea capturată rezolvă asta într-o singură linie.

Ține limitele de versiune separate de listele de cifruri

În manualul 2.6 acestea sunt trei controale, nu unul:

  • tls-cipher stabilește politica de cifruri pentru TLS 1.2 și versiuni mai vechi, și este transmis listei de cifruri OpenSSL;
  • tls-ciphersuites selectează suitele TLS 1.3;
  • tls-version-min și tls-version-max limitează versiunile de protocol pe care conexiunea le poate folosi.

Așadar, o listă de suite TLS 1.3 atent tăiată nu dovedește nimic despre faptul că o versiune mai veche este încă permisă. Dacă cerința este «doar TLS 1.3», o susține pragul inferior de versiune, iar lista de suite doar îngustează alegerile din interiorul acelui prag:

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

Perechea aceea face două treburi. Ștergerea uneia dintre linii o lasă pe cealaltă să impună mai puțin decât crezi, și exact aceea este defecțiunea pentru care există toată verificarea aceasta.

Canalul de date este al patrulea control. data-ciphers negociază cifrul simetric din interiorul tunelului, iar rezultatul său nu spune nimic despre versiunea TLS a canalului de control. A vedea AES-256-GCM în rezumatul sesiunii nu este dovadă despre TLS 1.3 în niciun sens.

Citește show-tls ca pe un inventar local

--show-tls enumeră suitele acceptate de biblioteca criptografică de care este legat acest binar, în ordinea preferinței. Nu este un raport de la gateway. Manualul spune explicit că lista provine din biblioteca locală, ceea ce înseamnă că un laptop cu OpenSSL 3.x și un router cu o compilare mai veche vor tipări liste diferite în timp ce vorbesc cu același server.

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

Să presupunem că un client acceptă suitele A, B și C și că o sesiune o alege pe B. Asta nu stabilește nimic despre dacă serverul permite A sau C, nici despre dacă B este singura opțiune permisă. Ține cele trei rânduri separate, și majoritatea discuțiilor confuze despre TLS se rezolvă singure.

Inventarul merită totuși păstrat. Când o sesiune eșuează, comparația dintre lista bibliotecii și lista profilului îți spune dacă clientul a avut vreo șansă să ofere ceea ce voia serverul. Arată și dacă o modificare de backend a eliminat în tăcere TLS_CHACHA20_POLY1305_SHA256 din grupul pe care se bazează clienții mai vechi — genul de regresie care apare ca o mână de utilizatori care nu se pot conecta în timp ce toți ceilalți nu observă nimic.

Întreabă gateway-ul ceva la ce poate răspunde

Dacă administrezi serviciul, inspectează configurația efectivă a instanței care rulează, nu un fișier de pe disc. OpenVPN poate fi fost pornit cu altă cale --config, poate prelua incluziuni și poate să nu fi fost repornit de la editare. Politica demonului care rulează este ce întâlnesc clienții.

Dacă nu îl administrezi, cere operatorului cerințele de client acceptate sau un test de acceptare delimitat. O încercare respinsă nu este automat o suită respinsă: un prag de versiune, verificări de identitate a certificatului precum remote-cert-tls sau o nepotrivire între tls-auth și tls-crypt pot încheia schimbul înainte ca selecția suitei să conteze. Citește eroarea serverului înainte de a schimba lista clientului, pentru că «handshake failed» acoperă patru cauze diferite și doar una dintre ele este o nepotrivire de cifru.

Direcționarea openssl s_client către portul VPN nu reproduce nici ea întrebarea. Canalul de control rulează în interiorul propriei încadrări a OpenVPN, așa că o sondă TLS brută testează alt protocol pe un port care așteaptă altceva. Orice concluzie trasă din ea este despre sondă, nu despre tunel.

Înregistrează două rezultate și ține-le separate

O sesiune permisă proaspătă produce o linie de canal de control care numește versiunea protocolului și cifrul selectat, și o linie separată de canal de date care numește cifrul tunelului. Capturează-le pe amândouă cu versiunea clientului și numele profilului, și notează care instanță de server a răspuns:

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

Apoi citește cele două linii din acel fișier, nu din memorie. Perechea este dovada; un nume de suită singur este o preferință, iar limita de versiune este o afirmație separată despre ce refuză serverul.

Efectuează verificările în această ordine. Confirmă compilarea și backendul cu --version. Capturează --show-tls înainte de a schimba ceva. Enunță pragul de versiune cerut separat de lista de suite. Confirmă politica efectivă a instanței care rulează cu proprietarul ei. Observă o sesiune permisă și, dacă planul permite, o încercare respinsă cu o versiune mai veche. Înregistrează rezultatele canalului de control și ale canalului de date ca constatări separate.

Dacă un client cerut nu poate îndeplini un minim nou, ia acea decizie de migrare sau excepție în mod explicit, în loc să cobori în tăcere o regulă de acceptare fără legătură pentru ca lansarea să pară terminată.

Articole similare