Hoe u de vingerafdruk van een VPN-certificaat via een apart kanaal verifieert
Een vingerafdruk bewijst alleen identiteit wanneer de verwachte waarde binnenkomt via een kanaal dat de aanvaller niet beheert. Voer de controle in deze volgorde uit.
Een vingerafdruk is slechts zo betrouwbaar als het kanaal dat u vertelde wat u moest verwachten. Als de waarde waarmee u vergelijkt via dezelfde verbinding binnenkwam die u test, bewijst de vergelijking niets anders dan dat degene die die verbinding beheert consistent is. De controle moet in een vaste volgorde verlopen, en een mislukte stap hoort u te stoppen in plaats van u naar de volgende te duwen. Dit is de volgorde die ik gebruik wanneer een VPN-client meldt dat een certificaat is gewijzigd.
Benoem het object voordat u de waarde benoemt
Bepaal of de verwachte waarde bij het bladcertificaat van de server hoort, bij de uitgevende CA of bij de publieke sleutel in het blad. Dat zijn drie verschillende controles, en ze falen op verschillende manieren. Een overeenkomende CA-vingerafdruk pint de server niet vast, en een hash van de publieke sleutel overleeft bewust een heruitgifte die dezelfde sleutel behoudt.
Noteer ook het algoritme. SHA-256 is nu de normale verwachting, maar oudere gereedschappen drukten SHA-1 af tenzij u om iets anders vroeg, en een hexwaarde van 40 tekens is een teken dat u op het punt staat twee verschillende dingen te vergelijken.
Haal de verwachte waarde via een tweede kanaal
Het tweede kanaal moet er een zijn waar de partij waartegen u zich beschermt niet in kan schrijven. Een inrichtingssysteem waarbij u zich al authenticeert, een afgedrukt record in een kluis, een configuratiedatabase of een ondertekend document dat een ander proces aanlevert, komen allemaal in aanmerking. Een chatbericht van een collega, een supportpagina die u via een zoekresultaat bereikt en alles wat in de terminal wordt geplakt waarin u al debugt, komen niet in aanmerking.
Vraag om de volledige waarde en het algoritme, nooit om een voorvoegsel. Kolommen en hoofd- of kleine letters maken niet uit, maar afkappen maakt van een controle van 256 bits een gokspel.
Als niemand de verwachte waarde uit een onafhankelijke bron kan leveren, is de eerlijke uitkomst dat dit certificaat vandaag niet te verifiëren is. Dat zeggen is beter dan vastpinnen wat de client zojuist toonde, wat een waarschuwing in een gewoonte verandert.
Haal de waarde aan uw eigen kant eruit
Voor een certificaatbestand is de opdracht openssl x509 -in server.crt -noout -fingerprint -sha256. De expliciete digest is belangrijk: zonder die digest hangt de uitvoer af van uw OpenSSL-versie. Het resultaat is een hexreeks gescheiden door dubbele punten, dus verwijder de dubbele punten en zet beide kanten om naar kleine letters voordat u vergelijkt.
Voor een eindpunt dat rechtstreeks TLS spreekt, verbindt u en pompt u het certificaat eruit: openssl s_client -connect vpn.example.com:443 -servername vpn.example.com < /dev/null | openssl x509 -noout -fingerprint -sha256. Dit werkt voor een webbeheerpaneel of een TLS-listener, niet voor OpenVPN, waarvan het besturingskanaal in de tunnel zit. Voor OpenVPN leest u het certificaat uit het profiel op schijf in plaats van het uit de socket te proberen vangen.
De vergelijking hoort mechanisch te zijn. Normaliseer beide waarden met tr -d ':' en een omzetting naar kleine letters, en vergelijk dan de hele reeks. Het met het oog doen is hoe een overeenkomend voorvoegsel een verschil in de laatste byte verbergt. Als de reeksen verschillen, behandel het verschil dan als echt voordat u een verklaring zoekt.
Stopvoorwaarden
Stop als het object verschilt, want een CA-vingerafdruk kan een bladcertificaat niet vrijpleiten en een blad kan de CA niet vrijpleiten. Stop als het algoritme verschilt, want een SHA-1-waarde vergeleken met een SHA-256-waarde zegt u niets. Stop als de vingerafdruk overeenkomt maar het certificaat verlopen, ingetrokken of voor een andere naam uitgegeven is; een overeenkomende hash is geen geldigheidscontrole en herstelt geen gebroken keten. Stop ook als het serienummer niet overeenkomt met het serienummer in het record waarmee u controleert, want dat is de goedkoopste manier om een verwisseld certificaat op te merken.
Stop als de nieuwe waarde via het kanaal kwam dat u testte. Rotatie kan een vingerafdruk rechtmatig veranderen, maar de vervangende waarde moet nog steeds uit het vertrouwde proces komen, niet uit de waarschuwingsdialoog die de vraag opriep.
Stop als de voorgestelde oplossing is om hostnaam- of ketenverificatie uit te schakelen. Een vingerafdruk voegt een beperking toe aan de normale controles; hij vervangt ze niet, tenzij de uitrol bewust een model met alleen pin heeft gekozen, en die keuze brengt zijn eigen operationele kosten mee.
Na de vergelijking
Leg vast wat u hebt vergeleken, waar de verwachte waarde vandaan kwam en wanneer. Als het certificaat opnieuw is uitgegeven, werkt u de opgeslagen verwachting bij via hetzelfde vertrouwde kanaal en noteert u het nieuwe serienummer, want het serienummer is wat de volgende rotatie controleerbaar maakt.
Wees daarna duidelijk over de grenzen. Een vingerafdruk bevestigt dat het certificaat dat u hebt het certificaat is waarvan iemand u zei dat u het moest verwachten. Hij zegt niets over het feit of de host ongecompromitteerd is, en niets over het feit of de dienst logt of beperkt wat dat certificaat kan bereiken.