Waar hoort een privésleutel van een VPN thuis: bestand, CNG of TPM?
Kies tussen een sleutelbestand, een niet-exporteerbare softwareopslag en een TPM voor een VPN-identiteit, en onderbouw de keuze met opdrachten en een terugdraaiplan.
Twee vragen bepalen waar een privésleutel van een VPN thuishoort: of het sleutelmateriaal van de host kan worden gekopieerd, en of een proces hem kan gebruiken zonder iemand achter het toetsenbord. Het marketinglabel van een opslag beantwoordt geen van beide. Een tunneldienst die na een herstart terug moet komen, heeft onbeheerde werking nodig, wat alles uitsluit wat vastzit aan een pincode die een mens intypt.
Kies tussen kopiëren en gebruiken
Kopiëren en gebruiken falen op verschillende manieren, dus behandel ze als twee eisen in plaats van één. Een aanvaller die de sleutelbytes kan lezen, draagt de identiteit naar een andere host, en de oorspronkelijke machine merkt daar niets van. Een aanvaller die de bytes niet kan lezen maar wel het ondertekeningsproces kan bereiken, authenticeert zich nog steeds zolang die toegang duurt.
Een bestandssleutel is triviaal kopieerbaar, wat hem ook het makkelijkst maakt om te back-uppen en te herstellen. Een software-sleutelopslag verandert de API, niet de grens: de provider weigert zijn eigen exportaanroepen, maar dezelfde beheerderscontext die de sleutel installeerde, heeft meestal andere routes naar het materiaal. Niet-exporteerbaar bij een softwareprovider is een uitspraak over ondersteunde bewerkingen, geen bewijs van een hardwaremuur. Zie het als een verkeersdrempel tegen achteloos kopiëren, niet als bescherming tegen iemand die uw sessie al heeft.
Een TPM of een smartcard voert de ondertekeningsbewerking in hardware uit en geeft alleen het resultaat terug. Dat sluit het kopieerpad en laat het gebruikspad open voor alles wat een handtekening kan aanvragen.
Stem de opslag af op de tunneldienst
De dienst beperkt dit meer dan het beveiligingsbeleid. WireGuard neemt een base64-privésleutel uit een bestand of uit de invoer van wg set en heeft geen route naar een certificaatopslag, dus een TPM-gebaseerde interfacesleutel is niet aan de orde. OpenVPN dat tegen OpenSSL 3 is gebouwd, kan een sleutel via een provider-URI laden, en strongSwan levert een TPM-plugin naast PKCS#11-ondersteuning, maar beide hangen af van hoe uw pakket is gecompileerd.
Een dienst die de gekozen opslag niet kan bereiken, maakt van de hardwarescheiding decoratie. Iemand exporteert de sleutel één keer, laat hem in een bestand liggen, en de rest van het ontwerp draait stilletjes op die kopie.
Vernieuwing is de andere helft van de afstemming, en daar gaat het bij de meeste ontwerpen mis. Een opslag die werkt voor de eerste inschrijving maar voor elke heruitgifte een consolelogin eist, wordt omzeild zodra een certificaat op een onhandig uur verloopt. Test het heruitgiftepad terwijl de huidige sleutel nog maanden heeft.
Inventariseer de sleutel voordat u hem verplaatst
Leg vast wat de sleutel is voordat u wijzigt waar hij woont, want een migratie die de subject alternative names laat vallen, breekt de tunnel op een manier die als een routeringsfout leest. Dump het certificaat, controleer of de privésleutel leesbaar is waar de dienst hem verwacht, en controleer of het paar echt bij elkaar hoort.
openssl x509 -in vpn.crt -noout -subject -ext subjectAltName
openssl pkey -in vpn.key -check -noout
openssl x509 -in vpn.crt -noout -pubkey | openssl sha256
openssl pkey -in vpn.key -pubout | openssl sha256
De laatste twee digests moeten identiek zijn. Zijn ze dat niet, dan rondt de dienst zijn installatie af en faalt daarna elke poging met een certificaat- of handtekeningfout die nergens naar de echte oorzaak wijst. Het WireGuard-equivalent is korter, omdat de publieke sleutel rechtstreeks uit de private wordt afgeleid: wg pubkey < /etc/wireguard/wg0.key moet de peersleutel afdrukken die uw server al in zijn administratie heeft.
Rechten horen in dezelfde inventaris. stat -c '%a %U:%G' /etc/wireguard/wg0.key hoort 600 root:root terug te geven, en alles wat voor groep of wereld leesbaar is, betekent dat de sleutel al beschikbaar was voor processen die u nooit bedoelde.
Controleer de opslag en het gebruikspad
Verificatie kent drie delen, en het derde wordt overgeslagen. Bevestig dat de sleutel bestaat in de opslag die u koos, bevestig dat de dienst die sleutel heeft geladen en niet een achtergebleven kopie, en bevestig dan dat hij nog start als het exportartefact weg is.
certutil -store -user My
certutil -csp "Microsoft Platform Crypto Provider" -key -user
certutil -verifykeys -user My
ipsec listcerts
Op Windows somt de eerste opdracht de persoonlijke opslag op en drukt naast elke vermelding de sleutelprovider af, en daar duikt een certificaat op dat hardwaregestuurd lijkt maar in de softwareprovider zit. De tweede somt sleutels van de platform-cryptoprovider op, dus een VPN-identiteit die daar ontbreekt terwijl het certificaat aanwezig is, betekent dat de private helft ergens anders woont. Op een Linux-gateway meldt ipsec listcerts wat strongSwan heeft geladen, inclusief sleutels uit de TPM-plugin. Vergelijk vingerafdrukken of publieke-sleutelhashes met de inventaris in plaats van het aantal vermeldingen te vertrouwen.
De negatieve test is degene die het ontwerp bewijst. Verplaats de geëxporteerde sleutel uit de configuratiemap van de dienst, herstart de service en lees in het log welke identiteit hij presenteert. Een tunnel die toch opkomt gebruikt de opslag; een mislukte start betekent dat het ontwerp echt op een kopie draaide.
Leg vernieuwing en terugdraaien vast
Terugdraaien verschilt sterk tussen de twee families, en dat verschil hoort in de ontwerpnotitie, niet in een incidentgesprek. Een bestandssleutel kan versleuteld worden geback-upt en hersteld, dus een mislukte migratie is omkeerbaar. Een niet-exporteerbare sleutel kan helemaal niet worden geback-upt, waardoor heruitgifte en herinschrijving het enige herstelpad zijn als het apparaat sterft.
Controleer de vervaldatum voordat die een storing wordt: openssl x509 -in vpn.crt -noout -checkend 2592000 eindigt met een niet-nulcode zodra het certificaat binnen dertig dagen verloopt, dus het past zo in een monitoringcontrole. Een wekelijkse run van die regel vangt de vernieuwing die niemand had ingepland.
Verwijderen gebeurt op de server: verwijder de peer of trek het serienummer in en bevestig daarna dat de tunnel faalt, want een client met een gecachte sessie kan een half afgeronde intrekking een tijdje verbergen. De intrekking moet ook het CRL- of OCSP-pad van de concentrator bereiken, niet alleen de CA-database. Een certificaat is een openbaar document, en het RFC 5280-profiel beschrijft hoe het wordt gevalideerd; niets van die validatie beschermt een privésleutel die vóór de rotatie is gekopieerd.
Schrijf de beslissing op één plek: welke opslag de sleutel houdt, welk proces hem mag gebruiken, wie hem opnieuw kan uitgeven en wat het terugdraaipad is. Die alinea is wat auditors vragen, en wat een personeelswissel overleeft.