Sammenlign to OpenVPN-profiler uten å lekke nøkler
En tekstdiff kan avsløre innebygde nøkler like lett som den viser en endret direktiv. Sammenlign etter rolle på beskyttede kopier, og lag deretter en egen redigert diagnostikkfil.
To profiler, den ene kobler til og den andre ikke, og den raske måten å se hvorfor er en diff. Problemet er at samme diff skriver ut den innebygde private nøkkelen, den statiske nøkkelen og enhver legitimasjonsblokk filen bærer, og folk limer inn utdataene i en chat før de oppdager det. Å bestemme hva du sammenligner kommer før du kjører kommandoen. Sammenlign struktur og roller på beskyttede kopier, og bygg en egen redigert fil når noen andre skal se den.
Hva en .ovpn-fil faktisk inneholder
En .ovpn-fil er en konfigurasjon med valgfrie innebygde blokker. Den kan holde et CA-sertifikat, et klientcertifikat, en privat nøkkel, en tls-auth eller tls-crypt-nøkkel og direktiver som peker på eksterne filer eller spør om legitimasjon. To filer kan se nesten identiske ut og bare avvike inne i en blokk, eller avvike i én direktiv som endrer transporten fullstendig. Antall linjer sier deg ingenting om hvilken av disse som skjedde.
En forskjell inne i en nøkkelblokk er ikke offentlig bevis på noe. Et gjenutstedt sertifikat og et med ny nøkkel kan gi samme form for endring, så blokkavviket sier at materialet er annerledes, ikke hvilken beslutning som skapte det. Behandle det som et signal om å sammenligne felt, ikke som en konklusjon.
Sammenlign etter rolle, ikke etter linje
Følg forbindelsens egen rekkefølge: endepunkt og transport først, deretter tillit og forventet identitet, deretter brukerautentisering, deretter ruter, DNS og skriptkroker. Den rekkefølgen samsvarer med det klienten gjør, så den første forskjellen du møter er det første som kunne ha brutt forbindelsen. Alfabetisk sammenligning spreder i stedet beslektede innstillinger over hele utdataene.
En feltbevisst gjennomgang ser på disse elementene, i den rekkefølgen. Alt klienten spør om interaktivt hører til autentiseringsraden, ikke tillitsradene.
remote,protoog port, inkludert hver forbindelsesblokk.caogcert: utsteder, emne og utløpsdato.- Om det i det hele tatt finnes en privat nøkkel, aldri hva den inneholder.
tls-authellertls-crypt-tilstedeværelse og nøkkelretning.- Autentiseringsdirektiver, inkludert enhver referanse til en legitimasjonsfil.
- Ruter, DNS-alternativer og skriptkroker som kjører ved tilkobling.
Når en fil har flere forbindelsesblokker, hold hvert alternativ sammen med endepunktet sitt. Å sammenligne bare den første remote-linjen kan overse alternativet klienten faktisk velger på dette nettverket.
Hvorfor en vanlig diff er feil verktøy
En vanlig diff er bygget for tekst, ikke for hemmeligheter. Den skriver gjerne ut en privat nøkkel i rullehistorikken, og den forteller deg ikke at direktivet du stirrer på er irrelevant for feilen. Feltuttrekk er både sikrere og mer lesbare, fordi sertifikatmateriale 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 to første kommandoene skriver ut identitet og gyldighet uten å berøre nøkkelen, så utdataene er trygge å lime inn. grep skriver ut direktivnavn og verdier, men aldri blokkinnholdet, noe som gjør det til riktig første gjennomgang når du mistenker en transport- eller ruteforskjell. Hvis en blokk selv må sammenlignes, sammenlign hashen i stedet for innholdet.
Bygg en redigert kopi til saken
Fjern ekte hemmeligheter og unødvendige identifikatorer mens du beholder feltnavn og nok struktur til å forklare forskjellen. En markør med samme form avslører fortsatt hvor materialet sitter og hvor langt det var, så avgjør om selv det er akseptabelt. Kontroller den endelige vedlagte filen selv i stedet for å stole på kommandoen du husker du kjørte. Ikke rediger den fungerende originalen bare for å lage et eksempel, fordi en redigert profil ikke nødvendigvis kan kjøres og aldri bør importeres igjen.
Hold originalene identifiserbare med filnavn og hash i stedet for å kopiere dem til tre kataloger med lignende navn. En hash-streng er nok til å bevise hvilken fil som ble gjennomgått og koster ingenting hvis den lekker. Beskjær kopiene når endringen er lukket, slik at neste person arver én autoritativ fil.
Hold sammenligningen knyttet til en feil
En sammenligning er verdt kostnaden når den besvarer et spørsmål om én import eller én tilkoblingsfeil. Navngi først trinnet som feiler, og sammenlign deretter bare feltene trinnet er avhengig av; å samle alle klientens legitimasjoner i én katalog gjør neste lekkasje mer sannsynlig og neste diagnose langsommere. Jo smalere spørsmålet er, jo kortere er listen over felt som kan svare på det.
Hvis en ny fil kom fra operatøren, bekreft distribusjonsveien før du erstatter tillitsmateriale. Etter endringen, inspiser den importerte kopien klienten faktisk valgte og det forhandlede resultatet, fordi en direktiv kan ignoreres eller leses annerledes av en annen klientversjon. Filen på disken er ikke bevis på forbindelsen som kjørte. Direktivenes semantikk er i OpenVPN 2.6-håndboken.