Erori TLS doar pe VPN-ul companiei: reparați depozitul de încredere corect
Același instrument, același laptop, doar VPN-ul strică TLS. Citiți mesajul, găsiți pachetul CA pe care îl citește binarul și adăugați o rădăcină în loc să dezactivați verificările.
Compilarea Go, instalarea Composer și clientul Python funcționează acasă și toate eșuează în interiorul VPN-ului companiei. Acest tipar vorbește despre traseu, nu despre aplicație. Ceva de pe tunel a schimbat lanțul de certificate pe care îl vede procesul dvs. sau a resetat strângerea de mână înainte să fi ajuns vreun lanț. Cele două defecțiuni arată similar într-un terminal și cer răspunsuri complet diferite.
Trei mesaje, trei mecanisme
Eroarea x509 certificate signed by unknown authority înseamnă că s-a construit un lanț și că rădăcina lui lipsește din depozitul de încredere pe care îl folosește acel proces. Eroarea self-signed certificate in certificate chain înseamnă de obicei că un proxy de inspecție a răspuns cu propriul certificat, iar acesta este un lanț pe care mediul dvs. de execuție nu îl recunoaște. Un SSL EOF în timpul strângerii de mână înseamnă că conexiunea s-a închis înainte de a fi trimis vreun certificat utilizabil, și asta este un dispozitiv intermediar care respinge ClientHello, deloc o problemă de încredere.
Adăugarea unui indicator pentru modul nesigur face toate cele trei mesaje să dispară, lăsând interceptarea pe loc, și elimină verificarea care ar prinde un atacator real.
Găsiți pachetul pe care procesul îl citește cu adevărat
Rădăcina corporativă instalată în depozitul Windows repară browserele și aplicațiile .NET care consultă depozitul de sistem. Nu face nimic pentru o compilare care rulează într-un container, care își poartă propriul pachet CA, și nici pentru un proces Python cu certifi sau un proces Node cu lista sa inclusă. Go citește bazinul de sistem al mediului în care rulează binarul, adică containerul, nu laptopul. Așa că o singură mașină produce simultan un browser care funcționează și un instrument de compilare care eșuează.
Întrebați instrumentul în loc să presupuneți. python3 -c "import ssl; print(ssl.get_default_verify_paths())" tipărește fișierele pe care le va consulta Python, iar node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" arată dacă o suprascriere este deja setată. Pentru un container, rulați aceeași verificare în interiorul imaginii, pentru că acesta este mediul pe care compilarea îl folosește cu adevărat.
Instalați o rădăcină acolo unde rulează compilarea
Obțineți rădăcina de inspecție de la IT ca fișier PEM și verificați-i amprenta printr-un canal separat înainte să aveți încredere în ea. Pe imaginile bazate pe Debian, copiați-o în /usr/local/share/ca-certificates/ și rulați update-ca-certificates; imaginile din familia RHEL folosesc update-ca-trust după ce fișierul este plasat în /etc/pki/ca-trust/source/anchors/. Într-o compilare de container, adăugați acești pași înaintea comenzii care eșuează, ca stratul să fie pus în cache deasupra instalării dependențelor.
Pentru un devcontainer local, montați PEM-ul și rulați aceeași comandă de actualizare la pornire, în loc să o coaceți într-o imagine personală pe care nimeni altcineva nu o poate reproduce. Instrumentele care își aduc propriul pachet au nevoie de propria suprascriere documentată: pip are o setare de certificat, npm are o setare cafile, iar majoritatea celorlalte acceptă variabilele de mediu standard.
Acest lucru nu este același cu a accepta orice certificat. Adăugați o rădăcină anume, obținută de la partea care face inspecția, într-un singur mediu, iar verificarea rămâne activă pentru orice alt lanț. Notați ce fișier a fost adăugat și când expiră, pentru că o rădăcină de inspecție se reînnoiește ca orice alt CA.
Când strângerea de mână moare înainte de un certificat
Dacă nu se prezintă nimic, nicio modificare a depozitului de încredere nu va ajuta. Comparați aceeași cerere cu tunelul pornit și oprit, apoi inspectați lanțul direct cu openssl s_client -connect host:443 -servername host -showcerts. O conexiune care se finalizează în afara VPN-ului și este resetată în interiorul lui este o decizie de politică a dispozitivului intermediar, iar remediul este o excepție pentru acel host, nu un alt certificat. Cereți ca registrul de pachete sau punctul final API să treacă nemodificat.
Împărțirea tunelului pentru ca instrumentul să ocolească VPN-ul evită inspecția acelui trafic, ceea ce poate încălca politica și nu face instrumentul de încredere.
Notați rezultatul pentru fiecare instrument
O notă scurtă care enumeră binarul, fișierul de încredere pe care îl citește, variabila de mediu în joc și excepția aprobată scutește următoarea persoană de întregul diagnostic. Țineți nota pe instrument, nu pe laptop, pentru că laptopul este rareori lucrul care s-a schimbat.
Și țineți două propoziții separat în tichet: am instalat o rădăcină corporativă anume și am dezactivat verificarea. Doar una dintre ele este o acțiune de suport.