Redenumirea unei biblioteci criptografice nu repară un client vechi
O legătură simbolică schimbă ce fișier deschide încărcătorul, nu interfața pentru care a fost construit binarul. Verificați tipul eșecului înainte de a atinge orice bibliotecă.
Parcurgeți eroarea încărcătorului în ordine: ce fișier lipsește, ce arhitectură folosește binarul, ce simbol dorea și dacă eșecul a avut loc înainte sau după pornirea procesului. Sunt patru probleme diferite, iar o legătură simbolică rezolvă doar prima. Tratarea lor în ordine evită rezultatul obișnuit în care clientul pornește și apoi eșuează la primul handshake. Lista se încheie cu verificarea prin lansatorul real, nu cu un test manual.
Notați calea executabilului, arhitectura acestuia și prima eroare cuvânt cu cuvânt înainte de a schimba ceva.
Patru eșecuri diferite în spatele unei singure erori
Un obiect partajat lipsă este o problemă de găsire a fișierului: încărcătorul a căutat un nume și nu a găsit nimic. Un simbol lipsă este o problemă de interfață: fișierul există și nu exportă ceea la ce face referire binarul. O nepotrivire de versiune a simbolului este aceeași clasă, cu mai multe detalii. Un algoritm neacceptat raportat după pornire este o schimbare de comportament în interiorul unei biblioteci care s-a încărcat cu succes. Fiecare cere un răspuns diferit, și doar primul este o chestiune de nume.
ldd asupra binarului și readelf -d asupra secțiunii sale dinamice arată ce solicită, ceea ce de obicei este suficient pentru a separa o problemă de fișier de una de interfață.
Ce cere de fapt OpenSSL 3
Ghidul de migrare la OpenSSL 3 este direct: aplicațiile construite pentru versiuni anterioare necesită cel puțin recompilare, iar compatibilitatea codului sursă nu este garantată. Interfețele s-au schimbat, iar unele au fost declarate învechite sau eliminate. Un alias de nume de fișier nu poate face o recompilare și nu poate învăța un binar vechi o interfață nouă. Legarea unei biblioteci mai noi sub un nume care pare mai vechi produce un program care poate porni și apoi eșua într-un loc mult mai puțin evident.
Asta este mai rău decât un eșec curat. O eroare a încărcătorului numește problema imediat, în timp ce un eșec târziu în interiorul unei operațiuni arată ca o problemă de rețea sau de acreditări și trimite investigația în direcția greșită.
De ce biblioteca distribuției este locul greșit
Înlocuirea unei biblioteci a distribuției pentru a satisface un singur client schimbă mediul pentru fiecare program de pe mașină, inclusiv actualizările de securitate și tot ce se bazează pe interfața existentă. Copierea unei biblioteci vechi lângă binar este mai restrânsă, dar creează totuși o dependență pe care cineva trebuie să o întrețină și să o patchuiască. Niciuna nu este o cale de compatibilitate aprobată, chiar dacă pare să funcționeze în ziua aplicării. Un alias global lăsat după experiment este mai rău, pentru că nimeni nu își amintește de ce există.
Folosiți clientul și setul de dependențe acceptate de furnizor pentru versiunea reală de sistem, arhitectura și gateway-ul. Un format de pachet care a funcționat pentru o persoană nu stabilește calea corectă actuală, iar o rețetă arhivată este o dovadă despre trecut.
Verificați lansatorul, nu lansarea
După o înlocuire acceptată, verificați ce rezolvă lansatorul normal: ldd asupra executabilului instalat, versiunile de bibliotecă pe care le numește și mediul pe care serviciul îl transmite. Apoi rulați autentificarea dorită și o operațiune reală. O invocare manuală cu un mediu modificat dovedește doar că shell-ul dumneavoastră îl poate porni. Lansatorul, intrarea din desktop sau unitatea de serviciu este ceea ce utilizatorii rulează de fapt.
Dacă nu există o compilare acceptată, cereți proprietarului VPN o alternativă sau o cale de migrare. Trecerea silențioasă la alt protocol, sau presupunerea că un client cu un nume de furnizor cunoscut satisface gateway-ul, mută eșecul în loc să îl repare.
Acolo unde o soluție temporară de compatibilitate este inevitabilă, documentați-o, limitați-o la acel binar și eliminați-o când apare compilarea acceptată.