8192-bits sleutels laten de handshake vastlopen; DH van 1024 bits wordt geweigerd
Twee maatfouten met tegengestelde oplossingen: een te grote sleutel verbrandt handshaketijd tot de tegenpartij een time-out krijgt, terwijl een kleine DH-groep wordt geweigerd voordat die begint.
Bij de ene server blijven clients een tijdje hangen en verbinden daarna opnieuw, bij een andere worden verbindingen meteen geweigerd met een bericht over de sleutelgrootte. Ze lijken op verschillende bugs en het is dezelfde bug die in tegengestelde richtingen wijst. Handshake-cryptografie heeft een kostenpost die met de parametergrootte groeit, en ze heeft ook een ondergrens waar moderne bibliotheken niet onder gaan. Het materiaal dimensioneren is de checklist, en het eerste punt is beslissen welke van de twee fouten je werkelijk hebt.
Lees de fout voordat je iets opnieuw genereert
De timing vertelt je het meeste. Een handshake die enkele seconden duurt en dan sterft, betekent meestal dat de berekening het geduld van de tegenpartij heeft overleefd, wat wijst op parameters die te groot zijn voor de hardware of voor de time-out. Een onmiddellijke weigering die een sleutel- of groepsgrootte noemt, wijst de andere kant op, naar materiaal dat de bibliotheek helemaal niet accepteert.
Die twee hebben tegengestelde correcties nodig, en daar gaat het bij de meeste pogingen mis. 8192-bits parameters opnieuw genereren op een client die al een kleine groep heeft geweigerd, maakt het langzame geval erger zonder iets voor het snelle te doen. Schrijf op welk symptoom je zag voordat je een bestand aanraakt.
Controleer dan wat er van de tegenpartij wordt gevraagd. Een server die is ingesteld voor een grote groep in een eindig veld dwingt elke client om bij elke heronderhandeling dezelfde CPU-tijd te besteden, niet alleen bij het verbinden. Als het probleem met een vast interval verschijnt in plaats van bij het opstarten, is dat interval een sterke aanwijzing welke instelling duur is. Heronderhandeling herhaalt de hele berekening, dus een stagnatie die elk uur terugkomt is meestal dezelfde kosten die opnieuw worden betaald.
Het langzame geval: materiaal dat de hardware niet kan betalen
Het werk van Diffie-Hellman en RSA groeit snel met de sleutelgrootte, en dat alles gebeurt voordat er verkeer door de tunnel stroomt. Op een kleine router of een client met weinig vermogen kan een voldoende grote groep de uitwisseling voorbij de time-out van de andere kant duwen, zodat de verbinding het opnieuw probeert of simpelweg lijkt te hangen zonder enige fout.
De oplossing is terug te gaan naar een grootte die elke tegenpartij ondersteunt en elk apparaat comfortabel kan berekenen. Een RSA-sleutel van 2048 bits en een groep van 2048 bits blijven een breed compatibele basislijn; groter helpt alleen als alle partijen het eens zijn en de CPU het bij elke heronderhandeling kan betalen. Alles boven die basislijn is een bewuste ruil, geen upgrade.
Grootte is geen score, en het grootste getal in een vergelijkingstabel is niet automatisch de juiste keuze. Kies de kleinste waarde die je beleid toestaat en die alle tegenpartijen accepteren, en meet dan de handshake in plaats van aan te nemen dat die beter werd. Een kleinere groep die nog steeds in de time-out loopt, vertelt je dat de grootte nooit het hele verhaal was.
Het snelle geval: een groep die de bibliotheek weigert
Moderne OpenSSL-builds weigeren de kleinste groepen in een eindig veld botweg, en een verhoogd beveiligingsniveau duwt de ondergrens nog hoger. Router-firmware die een decennia oud parameterbestand meebrengt, is de gebruikelijke bron, en het symptoom is een verbinding die meteen mislukt met een bericht dat de groep of sleutelgrootte noemt. Niets aan die fout is periodiek, en dat maakt hem juist makkelijk te herkennen.
Vervang het bestand in plaats van de configuratie te bewerken om de controle over te slaan. Genereer een actuele groep, valideer die, en installeer hem dan waar de daemon hem echt leest. Bewaar het oude bestand tot een client met succes verbinding heeft gemaakt met het nieuwe:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemHet controlecommando valideert het bestand en print niets nuttigs als het slaagt; de lijst bevestigt dat je het bestand hebt vervangen dat de dienst laadt, niet een verouderde kopie ernaast. Wijs de configuratie naar dat pad, herstart de daemon en bevestig dat een client die eerder faalde nu de handshake voltooit.
Als de server ook een beveiligingsniveau of een certificaatprofiel instelt, lees die dan voordat je concludeert dat de groep verkeerd was. Een profiel dat een strengere klasse vereist, kan materiaal weigeren dat de standaard zou hebben geaccepteerd, en die instelling verwijderen is een smallere wijziging dan de controle wereldwijd uitschakelen.
Kies een grootte voor de tegenpartij en de hardware
Zoek uit wat het verre uiteinde aankan voordat je iets exotisch genereert. Een apparaat dat te oud is voor een groep van 2048 bits, is een apparaat om te vervangen, want de server op een zwakkere groep richten verandert alleen een compatibiliteitsklacht in een storing. Duurzame oplossingen bewegen naar nieuwere software in plaats van oudere parameters. Elke tijdelijke uitzondering op dit gebied heeft de neiging de permanente configuratie te worden.
Waar de CPU van de server de grens is, verander dan het algoritme in plaats van onder het beleid te zakken. Een sleuteluitwisseling met elliptische kromme zoals X25519 is dramatisch goedkoper dan een grote groep in een eindig veld en wordt breed ondersteund, wat het een beter antwoord maakt op een prestatieklacht dan een kleinere RSA-modulus.
Wat je ook kiest, test met één echte verbinding en kijk hoe lang de handshake duurt, niet alleen of die uiteindelijk verbinding maakt. Een verbinding die in twaalf seconden slaagt, heeft dezelfde grondoorzaak als een die op vijftien mislukt.
Leg de keuze vast zodat een herbouw die niet ongedaan maakt
Houd het parameterbestand onder configuratiebeheer en schrijf de grootte, de reden en de datum ernaast. Een herbouwde server die stilletjes zijn eigen standaardwaarden genereert, is de manier waarop dezelfde fout zes maanden later terugkomt zonder dat iemand de oorspronkelijke beslissing kan uitleggen.
Noteer dezelfde informatie naast het endpoint en het profiel, zodat een beoordeling die niet uit een bestandsgrootte hoeft te reconstrueren. Wanneer de volgende verbinding vastloopt, is die notitie het verschil tussen een controle van vijf minuten en een nieuw onderzoek. Het weerhoudt de volgende engineer er ook van het langzame geval op te lossen met een correctie die voor het snelle bedoeld was.