TLS-fejl kun på virksomhedens VPN: ret det rigtige certifikatlager
Samme værktøj, samme bærbare, kun VPN’en ødelægger TLS. Læs meddelelsen, find den CA-pakke som binæren læser, og tilføj én rod i stedet for at slå kontrollerne fra.
Go-bygget, Composer-installationen og Python-klienten virker alle derhjemme og fejler alle inde på virksomhedens VPN. Det mønster fortæller dig noget om vejen, ikke om applikationen. Noget på tunnelen har ændret den certifikatkæde, din proces ser, eller har nulstillet håndtrykket, før der overhovedet ankom en kæde. De to fejl ser ens ud i en terminal og kræver helt forskellige svar.
Tre meddelelser, tre mekanismer
Fejlen x509 certificate signed by unknown authority betyder, at en kæde blev opbygget, og at dens rod mangler i det certifikatlager, som processen bruger. Fejlen self-signed certificate in certificate chain betyder normalt, at en inspektionsproxy svarede med sit eget certifikat, og det er en kæde, som din runtime ikke genkender. En SSL EOF under håndtrykket betyder, at forbindelsen blev lukket, før der blev sendt noget brugbart certifikat, og det er en mellemboks, der afviser ClientHello, slet ikke et tillidsproblem.
Tilføjer man et flag for usikker tilstand, forsvinder alle tre meddelelser, mens aflytningen bliver på plads, og det fjerner den kontrol, der ville fange en rigtig angriber.
Find den pakke, som processen faktisk læser
Den virksomhedsrod, der er installeret i Windows-lageret, retter browsere og .NET-programmer, som slår op i systemlageret. Den gør intet for et byg, der kører i en container, som bærer sin egen CA-pakke, og intet for en Python-proces med certifi eller en Node-proces med sin medfølgende liste. Go læser systempuljen i det miljø, binæren kører i, altså containeren og ikke den bærbare. Derfor giver én maskine på samme tid en browser, der virker, og et byggeværktøj, der fejler.
Spørg værktøjet i stedet for at antage. python3 -c "import ssl; print(ssl.get_default_verify_paths())" udskriver de filer, som Python vil slå op i, og node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" viser, om en tilsidesættelse allerede er sat. Kør den samme kontrol inde i imaget for en container, for det er det miljø, bygget faktisk bruger.
Installer én rod der, hvor bygget kører
Hent inspektionsroden fra IT som en PEM-fil, og verificér dens fingeraftryk ad en separat kanal, før du stoler på den. På Debian-afledte images kopierer du den ind i /usr/local/share/ca-certificates/ og kører update-ca-certificates; images fra RHEL-familien bruger update-ca-trust, efter at filen er lagt i /etc/pki/ca-trust/source/anchors/. I et containerbyg tilføjer du de trin før den kommando, der fejler, så laget caches over installationen af afhængigheder.
Til en lokal devcontainer monterer du PEM-filen og kører den samme opdateringskommando ved start i stedet for at bage den ind i et personligt image, som ingen andre kan genskabe. Værktøjer, der leverer deres egen pakke, har brug for deres egen dokumenterede tilsidesættelse: pip har en certifikatindstilling, npm har en cafile-indstilling, og de fleste andre accepterer de standardmiljøvariabler.
Det er ikke det samme som at acceptere ethvert certifikat. Du tilføjer én bestemt rod, hentet fra den part, der udfører inspektionen, til ét miljø, og verifikationen forbliver slået til for enhver anden kæde. Notér, hvilken fil der blev tilføjet, og hvornår den udløber, for en inspektionsrod fornyes som enhver anden CA.
Når håndtrykket dør før et certifikat
Hvis der ikke præsenteres noget, hjælper ingen ændring af certifikatlagret. Sammenlign den samme anmodning med tunnelen oppe og nede, og undersøg derefter kæden direkte med openssl s_client -connect host:443 -servername host -showcerts. En forbindelse, der fuldføres uden for VPN’en og nulstilles inde i den, er en politikbeslutning fra mellemboksen, og midlet er en undtagelse for den vært, ikke endnu et certifikat. Bed om, at pakkeregistret eller API-endepunktet slippes igennem uændret.
At splitte tunnelen, så værktøjet omgår VPN’en, undgår inspektion for den trafik, hvilket kan bryde politikken og ikke gør værktøjet troværdigt.
Skriv resultatet ned for hvert værktøj
Et kort notat, der lister binæren, den tillidsfil den læser, den miljøvariabel der er i spil og den godkendte undtagelse, sparer den næste person for hele diagnosen. Hold notatet for hvert værktøj i stedet for for hver bærbar, for den bærbare er sjældent det, der blev ændret.
Og hold to sætninger adskilt i sagen: vi installerede en bestemt virksomhedsrod, og vi slog verifikationen fra. Kun én af dem er en supporthandling.