Ett fingeravtryck är bara så bra som kanalen som berättade för dig vad du skulle förvänta dig. Om värdet du jämför med kom via samma anslutning som du testar, bevisar jämförelsen inget annat än att den som kontrollerar anslutningen är konsekvent. Kontrollen måste ske i en fast ordning, och ett misslyckat steg bör stoppa dig i stället för att knuffa dig vidare till nästa. Här är ordningen jag använder när en VPN-klient rapporterar att ett certifikat har ändrats.

Namnge objektet innan du namnger värdet

Avgör om det förväntade värdet hör till serverns lövcertifikat, till den utfärdande CA:n eller till den publika nyckeln inuti lövet. Det är tre olika kontroller, och de misslyckas på olika sätt. Ett matchande CA-fingeravtryck pinnar inte servern, och en hash av den publika nyckeln överlever medvetet en återutgivning som behåller samma nyckel.

Skriv också ned algoritmen. SHA-256 är den normala förväntan nu, men äldre verktyg skrev ut SHA-1 om du inte bad om något annat, och ett hexvärde på 40 tecken är ett tecken på att du är på väg att jämföra två olika saker.

Hämta det förväntade värdet via en andra kanal

Den andra kanalen måste vara en som parten du skyddar dig mot inte kan skriva till. Ett etableringssystem som du redan autentiserar dig mot, en utskriven post i ett kassaskåp, en konfigurationsdatabas eller ett signerat dokument som en annan process levererar kvalificerar alla. Ett chattmeddelande från en kollega, en supportsida nådd via ett sökresultat och allt som klistras in i terminalen du redan felsöker i kvalificerar inte.

Be om det fullständiga värdet och algoritmen, aldrig ett prefix. Kolon och stora eller små bokstäver spelar ingen roll, men avkortning gör en kontroll på 256 bitar till ett gissningsspel.

Om ingen kan producera det förväntade värdet från en oberoende källa är det ärliga resultatet att certifikatet inte kan verifieras i dag. Att säga det är bättre än att pinna det klienten just visade, vilket gör en varning till en vana.

Extrahera värdet på din sida

För en certifikatfil är kommandot openssl x509 -in server.crt -noout -fingerprint -sha256. Den uttryckliga digesten spelar roll: utan den beror utdata på din OpenSSL-version. Resultatet är en kolonseparerad hexsträng, så ta bort kolonen och gör båda sidor till små bokstäver innan du jämför.

För en slutpunkt som talar TLS direkt, anslut och pumpa ut certifikatet: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Det fungerar för en webbadministrationspanel eller en TLS-lyssnare, inte för OpenVPN, vars kontrollkanal ligger inuti tunneln. För OpenVPN läser du certifikatet från profilen på disken i stället för att försöka fånga det från socketen.

Jämförelsen bör vara mekanisk. Normalisera båda värdena med tr -d ':' och omvandling till små bokstäver, jämför sedan hela strängen. Att göra det på ögat är hur ett matchande prefix döljer en skillnad i den sista byten. Om strängarna skiljer sig, behandla skillnaden som verklig innan du letar efter en förklaring.

Stoppvillkor

Stoppa om objektet skiljer sig, eftersom ett CA-fingeravtryck inte kan frikänna ett lövcertifikat och ett löv inte kan frikänna CA:n. Stoppa om algoritmen skiljer sig, eftersom ett SHA-1-värde jämfört med ett SHA-256-värde inte säger dig något. Stoppa om fingeravtrycket matchar men certifikatet är utgånget, återkallat eller utfärdat för ett annat namn; en matchande hash är inte en giltighetskontroll och reparerar inte en bruten kedja. Stoppa också om serienumret inte matchar serienumret i posten du kontrollerar mot, eftersom det är det billigaste sättet att upptäcka ett utbytt certifikat.

Stoppa om det nya värdet kom via kanalen du testade. Rotation kan lagligt ändra ett fingeravtryck, men ersättningsvärdet måste ändå komma från den betrodda processen, inte från varningsdialogen som väckte frågan.

Stoppa om den föreslagna åtgärden är att stänga av värdnamns- eller kedjeverifiering. Ett fingeravtryck lägger till en begränsning till de normala kontrollerna; det ersätter dem inte om inte driftsättningen medvetet har valt en modell med bara pin, och det valet har sina egna driftkostnader.

Efter jämförelsen

Anteckna vad du jämförde, var det förväntade värdet kom ifrån och när. Om certifikatet återutgavs, uppdatera den lagrade förväntan via samma betrodda kanal och notera det nya serienumret, eftersom serienumret är det som gör nästa rotation granskningsbar.

Var sedan tydlig med gränserna. Ett fingeravtryck bekräftar att certifikatet du har är det som någon sade att du skulle förvänta dig. Det säger ingenting om huruvida värden är okomprometterad, och ingenting om huruvida tjänsten loggar eller begränsar vad det certifikatet kan nå.

Relaterade artiklar