nepalaikoma sertifikato paskirtis: kodėl tarpinė CA nepavyksta
Kai OpenVPN praneša apie nepalaikomą sertifikato paskirtį, galinis sertifikatas gali būti nekaltas. Prieš ką nors išduodami iš naujo, palyginkite galinio sertifikato paskirtį su grandinės politika.
Serverio sertifikato paskirtis atrodo teisinga, raktas sutampa, datos tvarkingos, o ryšys vis tiek nepavyksta su unsupported certificate purpose. Ši detalė, kuri tai išsprendžia, paprastai yra toje pačioje eilutėje kaip klaida: gylio reikšmė ir subject, nurodantys aukščiau grandinėje esantį sertifikatą. Vykdomi du skirtingi testai, ir tik vienas jų susijęs su galiniu sertifikatu. Jų palyginimas paaiškina, kodėl pakeitus serverio sertifikatą niekas nesikeičia.
Kurį sertifikatą tikrintuvas iš tikrųjų atmetė
Grandinė nėra vienas tris kartus pakartotas objektas. Galinis sertifikatas neša serverio vardą ir raktą, tarpiniai jį susieja su šaknimi, ir kiekvienas turi savo galiojimo laikotarpį, apribojimus ir paskirtis. Kai klaida nurodo gylį, tas skaičius žymi poziciją grandinėje, kurią sukūrė tikrintuvas, ir tai gali būti ne ta pozicija, kurios tikitės, jei serveris siunčia netikėtą grandinę.
Skaitykite to gylio sertifikato laukus, o ne sertifikato, kurį laikėte kaltu. Paprašykite dviejų plėtinių, kurie riboja išdavimą, užuot išvedę kiekvieną lauką, nes atsakymas beveik visada yra viename iš jų. Plėtinių išvestį saugu dalytis; privačių raktų — niekada.
openssl x509 -in issuing-ca.pem -noout -subject -issuer -ext basicConstraints -ext extendedKeyUsage
Jei nurodytas sertifikatas yra tarpinis, kurio išplėstinė rakto paskirtis mini ką nors nesusijusio su TLS serverio autentifikavimu, likusi nesėkmė kyla mechaniškai. Grandinės negalima naudoti paskirčiai, kurios paprašė OpenVPN.
Galinio sertifikato paskirtis ir grandinės politika yra du testai
Galinio sertifikato testas užduoda siaurą klausimą: ar šis galutinio subjekto sertifikatas leidžia serverio autentifikavimą šiam vardui? Grandinės testas užduoda platesnį: ar kiekvienas kelyje esantis sertifikatas gali tarnauti šiai paskirčiai? Sertifikatų institucija, kuriai leidžiama išduoti tik kliento sertifikatus, praeis savo parašo patikras ir vis tiek nepraeis antrojo testo, nes kelias, kurį ji įgalioja, neapima paskirties, kurios reikia programai. Abu testai nepavyksta tais pačiais žodžiais ir turi visiškai skirtingus sprendimus.
Štai kodėl ką tik išduotas galinis sertifikatas, teisingas visuose matomuose laukuose, gali nepavykti iš karto. Štai kodėl pataisymas paprastai priklauso išduodančios institucijos profiliui, o ne VPN konfigūracijai.
Nesamas EKU nėra ribojantis EKU
RFC 5280 padaro išplėstinės rakto paskirties plėtinį neprivalomą ir, kai jis yra, ribojantį. Todėl CA sertifikatas be plėtinio nepasakė „ne“ serverio autentifikavimui, o tas, kuriame išvardyta tik nesusijusi paskirtis, pasakė ką nors labai konkretaus. Šių dviejų būsenų laikymas lygiavertėmis duoda neteisingą diagnozę ir, dar blogiau, neteisingą pataisymą. Skirtumas taip pat paaiškina, kodėl dvi institucijos, konsolėje atrodančios panašiai, grandinėje elgiasi visiškai skirtingai.
Bibliotekų elgsena čia taip pat nevienoda. OpenSSL dokumentas apie tikrinimo parinktis aprašo savo požiūrį į paskirties patikras CA sertifikatuose, ir šis požiūris yra įgyvendinimo politika, o ne taisyklė, kurios kiekvienas TLS stekas laikosi identiškai. Aprašykite, ką daro jūsų tikrintuvas, o tada patvirtinkite tai versijoje, kurią iš tikrųjų vykdote.
Atkurkite nesėkmę neprisijungus prieš išduodami iš naujo
Patikra neprisijungus pašalina programą iš lygties. Jei grandinė nepavyksta taip pat su ta pačia paskirtimi, problema yra sertifikatas ir jokia serverio konfigūracija to nepaslėps. Jei grandinė praeina neprisijungus, o paslauga vis tiek atsisako, programa prašo kitos paskirties arba naudoja kitą grandinę nei ta, kurią testavote.
openssl verify -purpose sslserver -show_chain -CAfile root-ca.pem -untrusted issuing-ca.pem vpn-server.pem
-show_chain svarbus, nes atspausdina kelią, kurį sukonstravo įrankis, o jis dažnai nėra jūsų nurodyta failų tvarka. Ši išvestis yra greičiausias būdas sužinoti, kad antrasis tarpinis sertifikatas traukiamas iš pasitikėjimo saugyklos, kad serveris siunčia neskirtą kryžmai pasirašytą variantą arba kad paskirties vėliavėlė, nukopijuota iš mokymo, priklauso kitai rolei nei aptarnaujama.
Taisykite išdavimo politiką, o ne patikros kvietimą
Ilgalaikė pataisa yra tarpinis sertifikatas, išduotas pagal politiką, kuri leidžia paskirtis, kurioms jis turi tarnauti, o apribojimas užrašytas ir peržiūrėtas. Kiekvienos paskirties pridėjimas prie kiekvienos institucijos nėra politika; tai pašalina apribojimą, suteikusį plėtiniui prasmę, ir paprastai išgyvena incidentą, kuris jį sukėlė. Trumpa pastaba profilyje, aprašanti, kokias roles institucija gali sertifikuoti, neleidžia kitam pakartotiniam išdavimui kartoti tos pačios diskusijos.
Tikrinimo išjungimas yra kita viliojanti trumpa priemonė, ir jis paverčia sertifikato problemą pasitikėjimo problema. Palikite paskirties patikrą, sutaisykite grandinę ir dar kartą paleiskite tą pačią patikrą neprisijungus, kad patvirtintumėte, jog kelias dabar tarnauja numatytai rolei, prieš vėl liesdami paslaugą.