Sammenlign to OpenVPN-profiler uden at lække nøgler
En tekstdiff kan afsløre indlejrede nøgler lige så let, som den viser en ændret direktiv. Sammenlign efter rolle på beskyttede kopier, og rediger derefter en separat diagnostisk fil.
To profiler, den ene opretter forbindelse og den anden ikke, og den hurtige måde at se hvorfor er en diff. Problemet er, at den samme diff udskriver den indlejrede private nøgle, den statiske nøgle og enhver credential-blok, filen bærer, og folk indsætter outputtet i en chat, før de opdager det. At beslutte, hvad du sammenligner, kommer før du kører kommandoen. Sammenlign struktur og roller på beskyttede kopier, og byg en separat redigeret fil, når nogen andre skal se den.
Hvad en .ovpn-fil egentlig indeholder
En .ovpn-fil er en konfiguration med valgfrie indlejrede blobs. Den kan rumme et CA-certifikat, et klientcertifikat, en privat nøgle, en tls-auth eller tls-crypt-nøgle og direktiver, der peger på eksterne filer eller spørger om legitimationsoplysninger. To filer kan se næsten identiske ud og kun afvige inde i en blob, eller afvige i én direktiv, der ændrer transporten fuldstændigt. Antallet af linjer fortæller intet om, hvilket af disse der skete.
En forskel inde i en nøgleblok er ikke offentligt bevis på noget. Et genudstedt certifikat og et med ny nøgle kan give den samme form for ændring, så blob-uoverensstemmelsen fortæller, at materialet er anderledes, ikke hvilken beslutning der skabte det. Behandl det som et signal om at sammenligne felter, ikke som en konklusion.
Sammenlign efter rolle, ikke efter linje
Følg forbindelsens egen rækkefølge: endpoint og transport først, derefter tillid og forventet identitet, derefter brugergodkendelse, derefter ruter, DNS og script-kroge. Den rækkefølge svarer til det, klienten gør, så den første forskel, du møder, er den første ting, der kunne have brudt forbindelsen. Alfabetisk sammenligning spreder i stedet beslægtede indstillinger over hele outputtet.
Et feltbevidst gennemløb ser på disse elementer i den rækkefølge. Alt, hvad klienten spørger om interaktivt, hører til godkendelsesrækken frem for tillidsrækkerne.
remote,protoog port, inklusive hver forbindelsesblok.caogcert: udsteder, emne og udløbsdato.- Om der overhovedet er en privat nøgle, aldrig hvad den indeholder.
tls-authellertls-crypt-tilstedeværelse og nøgleretning.- Godkendelsesdirektiver, inklusive enhver henvisning til en credential-fil.
- Ruter, DNS-indstillinger og script-kroge, der kører ved forbindelse.
Når en fil indeholder flere forbindelsesblokke, hold hver indstilling sammen med sit endpoint. At sammenligne kun den første remote-linje kan overse det alternativ, klienten faktisk vælger på dette netværk.
Hvorfor en almindelig diff er det forkerte værktøj
En almindelig diff er bygget til tekst, ikke til hemmeligheder. Den vil med glæde udskrive en privat nøgle i scrollback og fortæller dig ikke, at den direktiv, du stirrer på, er irrelevant for fejlen. Feltudtræk er både sikrere og mere læsbare, fordi certifikatmateriale kan sammenlignes som metadata i stedet for bytes.
openssl x509 -in ca.crt -noout -subject -issuer -enddate
openssl x509 -in client.crt -noout -subject -issuer -enddate
grep -E '^(remote|proto|port|tls-auth|tls-crypt|route|dhcp-option)' profile.ovpn
De første to kommandoer udskriver identitet og gyldighed uden at røre nøglen, så deres output er sikkert at indsætte. grep udskriver direktivnavne og værdier, men aldrig blob-indholdet, hvilket gør det til det rigtige første gennemløb, når du mistænker en transport- eller ruteforskel. Skal en blob selv sammenlignes, så sammenlign dens hash i stedet for indholdet.
Byg en redigeret kopi til sagen
Fjern rigtige hemmeligheder og unødvendige identifikatorer, mens feltnavne og nok struktur til at forklare forskellen bevares. En markør af samme form afslører stadig, hvor materialet sidder, og hvor langt det var, så afgør, om selv det er acceptabelt. Kontrollér den endelige vedhæftning selv i stedet for at stole på den kommando, du husker, du kørte. Rediger ikke det fungerende original bare for at lave et eksempel, for en redigeret profil er ikke nødvendigvis eksekverbar og bør aldrig importeres igen.
Hold originalerne identificerbare ved filnavn og hash i stedet for at kopiere dem til tre mapper med lignende navne. En hash-streng er nok til at bevise, hvilken fil der blev gennemgået, og koster intet, hvis den lækker. Beskær kopierne, når ændringen er lukket, så den næste person arver én autoritativ fil.
Hold sammenligningen bundet til en fejl
En sammenligning er sin pris værd, når den besvarer et spørgsmål om én import eller én forbindelsesfejl. Navngiv først det trin, der fejler, og sammenlign derefter kun de felter, som trinnet afhænger af; at samle alle klientens legitimationsoplysninger i én mappe gør den næste lækage mere sandsynlig og den næste diagnose langsommere. Jo snævrere spørgsmålet er, jo kortere er listen over felter, der kan besvare det.
Hvis en ny fil kom fra operatøren, så bekræft dens distributionsvej, før du erstatter tillidsmateriale. Efter ændringen skal du inspicere den importerede kopi, som klienten faktisk valgte, og det forhandlede resultat, fordi en direktiv kan blive ignoreret eller læst anderledes af en anden klientversion. Filen på disken er ikke bevis på den forbindelse, der kørte. Direktivernes semantik findes i OpenVPN 2.6-manualen.