Cheile de 8192 de biți blochează strângerea de mână; DH de 1024 de biți este refuzat
Două defecte de dimensiune cu corecții opuse: o cheie prea mare consumă timpul strângerii de mână până când partenerul atinge timeout-ul, iar un grup DH mic este refuzat înainte de a începe.
Un server are clienți care se blochează o vreme și apoi se reconectează, iar altul refuză imediat conexiunile cu un mesaj despre dimensiunea cheii. Par defecte diferite și sunt același defect îndreptat în direcții opuse. Criptografia strângerii de mână are un cost care crește cu dimensiunea parametrilor și are și un prag sub care bibliotecile moderne nu coboară. Dimensionarea materialului este lista de verificare, iar primul punct este să decizi care dintre cele două defecte îl ai de fapt.
Citește eșecul înainte de a regenera ceva
Temporizarea îți spune cea mai mare parte. O strângere de mână care consumă câteva secunde și apoi moare înseamnă de obicei că calculul a depășit răbdarea partenerului, ceea ce indică parametri prea mari pentru hardware sau pentru timeout. Un refuz imediat care numește o dimensiune de cheie sau de grup indică cealaltă direcție, spre material pe care biblioteca nu îl va accepta deloc.
Acestea două au nevoie de corecții opuse, și aici greșesc cele mai multe încercări. Regenerarea parametrilor de 8192 de biți pe un client care a refuzat deja un grup mic agravează cazul lent fără să facă nimic pentru cel rapid. Notează ce simptom ai observat înainte de a atinge un fișier.
Apoi verifică ce i se cere partenerului. Un server configurat pentru un grup mare de câmp finit obligă fiecare client să consume același timp de CPU la fiecare renegociere, nu doar la conectare. Dacă problema apare la un interval regulat în loc de pornire, acel interval este un indiciu puternic despre ce setare este costisitoare. Renegocierea repetă întregul calcul, așa că o blocare care revine în fiecare oră este de obicei același cost plătit din nou.
Cazul lent: material pe care hardware-ul nu și-l permite
Munca Diffie-Hellman și RSA crește repede cu dimensiunea cheii, și totul se întâmplă înainte de a curge vreun trafic prin tunel. Pe un router mic sau un client cu putere redusă, un grup suficient de mare poate împinge schimbul dincolo de timeout-ul celeilalte părți, astfel încât conexiunea reîncearcă sau pur și simplu pare blocată fără nicio eroare.
Corecția este să cobori la o dimensiune pe care fiecare partener o acceptă și pe care fiecare dispozitiv o poate calcula confortabil. O cheie RSA de 2048 de biți și un grup de 2048 de biți rămân o bază larg compatibilă; mai mare ajută doar când toate părțile sunt de acord și CPU-ul poate plăti la fiecare renegociere. Tot ce depășește acea bază este un compromis deliberat, nu un upgrade.
Dimensiunea nu este un punctaj, iar cel mai mare număr dintr-un tabel comparativ nu este automat alegerea corectă. Alege cea mai mică valoare pe care politica ta o permite și pe care toți partenerii o acceptă, apoi măsoară strângerea de mână în loc să presupui că s-a îmbunătățit. Un grup mai mic care tot depășește timpul îți spune că dimensiunea nu a fost niciodată toată povestea.
Cazul rapid: un grup pe care biblioteca îl refuză
Build-urile moderne OpenSSL refuză direct cele mai mici grupuri de câmp finit, iar un nivel de securitate ridicat împinge pragul și mai sus. Firmware-ul routerului care aduce un fișier de parametri vechi de decenii este sursa obișnuită, iar simptomul este o conexiune care eșuează imediat cu un mesaj care numește grupul sau dimensiunea cheii. Nimic din acel eșec nu este intermitent, și exact asta îl face ușor de recunoscut.
Înlocuiește fișierul în loc să editezi configurația pentru a sări peste verificare. Generează un grup actual, validează-l, apoi instalează-l acolo unde daemonul îl citește cu adevărat. Păstrează fișierul vechi până când un client se conectează cu succes cu cel nou:
openssl dhparam -out /etc/openvpn/ffdhe2048.pem 2048
openssl dhparam -in /etc/openvpn/ffdhe2048.pem -check -noout
ls -l /etc/openvpn/ffdhe2048.pemComanda de verificare validează fișierul și nu afișează nimic util când trece; listarea confirmă că ai înlocuit fișierul pe care serviciul îl încarcă, nu o copie veche alături. Îndreaptă configurația spre acea cale, repornește daemonul și confirmă că un client care eșua înainte acum finalizează strângerea de mână.
Dacă serverul setează și un nivel de securitate sau un profil de certificat, citește-le înainte de a concluziona că grupul a fost greșit. Un profil care cere o clasă mai strictă poate refuza material pe care valoarea implicită l-ar fi acceptat, iar eliminarea acelei setări este o schimbare mai îngustă decât dezactivarea verificării la nivel global.
Alege o dimensiune pentru partener și hardware
Află ce poate suporta capătul îndepărtat înainte de a genera ceva exotic. Un dispozitiv prea vechi pentru un grup de 2048 de biți este un dispozitiv de înlocuit, fiindcă îndreptarea serverului spre un grup mai slab doar transformă o plângere de compatibilitate într-o cădere. Corecțiile durabile merg spre software mai nou, nu spre parametri mai vechi. Fiecare excepție temporară din acest domeniu are obiceiul de a deveni configurația permanentă.
Acolo unde CPU-ul serverului este limita, schimbă algoritmul în loc să cobori sub politică. Un schimb de chei pe curbă eliptică precum X25519 este dramatic mai ieftin decât un grup mare de câmp finit și este larg suportat, ceea ce îl face un răspuns mai bun la o plângere de performanță decât un modul RSA mai mic.
Orice ai alege, testează cu o conexiune reală și urmărește cât durează strângerea de mână, nu doar dacă la final se conectează. O conexiune care reușește în douăsprezece secunde are aceeași cauză rădăcină ca una care eșuează la cincisprezece.
Notează alegerea ca o reconstrucție să nu o anuleze
Ține fișierul de parametri sub managementul configurației și scrie alături dimensiunea, motivul și data. Un server reconstruit care generează în tăcere propriile valori implicite este felul în care același defect revine șase luni mai târziu fără ca nimeni să poată explica decizia inițială.
Notează aceleași informații lângă endpoint și profil, astfel încât o revizuire să nu le reconstruiască din dimensiunea unui fișier. Când următoarea conexiune se blochează, acea notă este diferența dintre o verificare de cinci minute și o investigație nouă. Îl oprește și pe următorul inginer să rezolve cazul lent cu o corecție gândită pentru cel rapid.