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, proto og port, inklusive hver forbindelsesblok.
  • ca og cert: udsteder, emne og udløbsdato.
  • Om der overhovedet er en privat nøgle, aldrig hvad den indeholder.
  • tls-auth eller tls-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.

Relaterede artikler