Go-bygget, Composer-installationen och Python-klienten fungerar alla hemma och alla misslyckas inne i företagets VPN. Det mönstret säger något om vägen, inte om programmet. Något på tunneln ändrade den certifikatkedja som din process ser, eller återställde handskakningen innan någon kedja ens anlände. De två felen ser likadana ut i en terminal och kräver helt olika svar.

Tre meddelanden, tre mekanismer

Felet x509 certificate signed by unknown authority betyder att en kedja byggdes och att dess rot saknas i det förtroendelager som processen använder. Felet self-signed certificate in certificate chain betyder vanligtvis att en inspektionsproxy svarade med sitt eget certifikat, och det är en kedja som din körmiljö inte känner igen. En SSL EOF under handskakningen betyder att anslutningen stängdes innan något användbart certifikat skickades, och det är en mellanliggande box som avvisar ClientHello, inte alls ett förtroendeproblem.

Att lägga till en flagga för osäkert läge får alla tre meddelandena att försvinna medan avlyssningen blir kvar, och det tar bort kontrollen som skulle fånga en riktig angripare.

Hitta paketet som processen faktiskt läser

Företagsroten som är installerad i Windows-lagret reparerar webbläsare och .NET-program som slår upp i systemlagret. Den gör ingenting för ett bygge som körs i en container, som bär sitt eget CA-paket, och ingenting för en Python-process med certifi eller en Node-process med sin medföljande lista. Go läser systempoolen i den miljö där binären körs, alltså containern och inte den bärbara datorn. En maskin ger därför samtidigt en webbläsare som fungerar och ett byggverktyg som misslyckas.

Fråga verktyget i stället för att anta. python3 -c "import ssl; print(ssl.get_default_verify_paths())" skriver ut de filer som Python kommer att slå upp, och node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)" visar om en överstyrning redan är satt. Kör samma kontroll inuti imagen för en container, eftersom det är miljön som bygget faktiskt använder.

Installera en rot där bygget körs

Hämta inspektionsroten från IT som en PEM-fil och verifiera dess fingeravtryck via en separat kanal innan du litar på den. På Debian-baserade images kopierar du den till /usr/local/share/ca-certificates/ och kör update-ca-certificates; images från RHEL-familjen använder update-ca-trust efter att filen lagts i /etc/pki/ca-trust/source/anchors/. I ett containerbygge lägger du till de stegen före kommandot som misslyckas, så att lagret cachas ovanför installationen av beroenden.

För en lokal devcontainer, montera PEM-filen och kör samma uppdateringskommando vid start i stället för att baka in den i en personlig image som ingen annan kan återskapa. Verktyg som levererar sitt eget paket behöver sin egen dokumenterade överstyrning: pip har en certifikatinställning, npm har en cafile-inställning, och de flesta andra accepterar standardmiljövariablerna.

Det här är inte samma sak som att acceptera vilket certifikat som helst. Du lägger till en bestämd rot, hämtad från parten som utför inspektionen, i en miljö, och verifieringen förblir på för varje annan kedja. Anteckna vilken fil som lades till och när den löper ut, eftersom en inspektionsrot förnyas som vilken annan CA som helst.

När handskakningen dör före ett certifikat

Om ingenting presenteras hjälper ingen ändring i förtroendelagret. Jämför samma begäran med tunneln uppe och nere, och undersök sedan kedjan direkt med openssl s_client -connect host:443 -servername host -showcerts. En anslutning som fullbordas utanför VPN:en och återställs inuti den är ett policybeslut från den mellanliggande boxen, och botemedlet är ett undantag för den värden, inte ännu ett certifikat. Be om att paketregistret eller API-slutpunkten släpps igenom oförändrat.

Att dela tunneln så att verktyget kringgår VPN:en undviker inspektion för den trafiken, vilket kan bryta mot policyn och inte gör verktyget pålitligt.

Anteckna resultatet per verktyg

En kort anteckning som listar binären, förtroendefilen den läser, miljövariabeln som är i spel och undantaget som är godkänt sparar nästa person hela diagnosen. Håll anteckningen per verktyg i stället för per bärbar dator, för den bärbara datorn är sällan det som ändrades.

Och håll två meningar åtskilda i ärendet: vi installerade en bestämd företagsrot, och vi stängde av verifieringen. Bara en av dem är en supportåtgärd.

Relaterade artiklar