Išdavimo eiga sustoja ties entry 22: invalid expiry date, o priešais jus esanti užklausa yra visiškai tvarkinga. Nusiskundimas ateina iš CA duomenų bazės analizatoriaus, ne iš CSR ir ne iš VPN kliento, kuris galiausiai pateiks sertifikatą. Šis skirtumas lemia visa kita: įrašas yra sugadintas, todėl taisymas priklauso CA būsenai, o ne užklausai ar partnerio konfigūracijai. Skaičiuojamą įrašą traktuokite kaip eilutę faile index.txt, ir problema susiaurėja iki apibrėžto duomenų klausimo su patikrinamu atsakymu.

Skaitykite klaidą kaip duomenų bazės nusiskundimą

Kiekvienas openssl ca iškvietimas pereina savo tekstinę duomenų bazę prieš ką nors pasirašydamas. Kiekvienoje eilutėje yra būsenos raidė, pasibaigimo laiko žyma, neprivaloma atšaukimo žyma, serijos numeris šešioliktaine forma, failo pavadinimas ir subjektas. Kai vienas laukas neanalizuojamas, komanda nurodo eilutės numerį ir sustoja, o ne spėlioja likusią įrašo dalį.

Tas sustojimas yra apsauginis, o ne pedantiškas. Įrašas, kurio įrankis negali perskaityti, palieka jį be galimybės nuspręsti, ar prašomas subjektas jau egzistuoja, ar serijos numeris jau išduotas, ar ką turėtų sudaryti kitas CRL sąrašas. Ėjimas toliau per blogą eilutę sukurtų būtent tą tylų nenuoseklumą, kuris iškyla po mėnesių, dažniausiai atšaukimo metu, kurio niekas negali paaiškinti. Skaitykite pranešimą kaip nusiskundimą duomenimis, ir tyrimas lieka CA kataloge.

Nukopijuokite CA būseną prieš ką nors liesdami

Padarykite viso CA katalogo momentinę kopiją, o ne tik duomenų bazės failo. Indeksas, jo atributų failas, serijos numerio ir CRL numerio failai, privatusis raktas ir išduoti sertifikatai visi dalyvauja vėlesnėse operacijose, o taisymas, kuris atkuria vieną ir praleidžia kitus, sukuria antrą incidentą. Kur yra, naudokite pačios CA atsarginių kopijų procedūrą, ir darbo metu sustabdykite suplanuotą išdavimą.

Užsirašykite OpenSSL rinkinį ir konfigūracijos failą, kurį nepavykusi komanda iš tikrųjų įkėlė. Diegimai dažnai laiko daugiau nei vieną CA katalogą, o klaida turi prasmę tik tos duomenų bazės, kurią nurodo pasirinkta konfigūracija, atžvilgiu.

Raskite įrašą ir iššifruokite jo datos lauką

Nurodytas eilutės numeris skaičiuojamas nuo pirmo įrašo, todėl sed -n '22p' index.txt patenka ant probleminio įrašo, kai tik patvirtinsite, kad virš jo nėra tuščių ar komentarų eilučių. Atspausdinkite tą eilutę su matomais skyrikliais, nes tabuliacijos ir galinės erdvės yra įprastos ir nematomos paprastame redaktoriaus lange.

Pasibaigimo laukas yra laiko žyma, kurios plotis priklauso nuo metų. Reikšmės iki 2049 rašomos UTCTime formatu kaip YYMMDDHHMMSSZ, o vėlesnės reikšmės pereina prie GeneralizedTime su keturženkliais metais. Įrašas, kuris maišo abi formas arba turi dviženklius metus ten, kur analizatorius dabar tikisi keturių, nepavyksta būtent šioje vietoje. Taip pat ir nutrūkusio rašymo paliktas sutrumpintas laukas.

Palyginkite įrašą su sertifikatu, į kurį jis nurodo, o ne su kitos CA failu. Pasirašytas sertifikatas yra autoritetas, sakantis, ką turėtų reikšti galiojimas, ir jis jau egzistuoja kaip analizuojamas objektas.

Pataisykite įrašą pagal pasirašytą sertifikatą

Perskaitykite tikrąsias datas su openssl x509 -in issued.pem -noout -dates -serial -subject. Konvertuokite notAfter į tą žymos plotį, kurį jūsų rinkinys rašo tiems metams, ir prieš pakeisdami nors vieną simbolį patvirtinkite, kad serijos numeris atitinka įrašą, kurį ketinate redaguoti.

Redaguokite tik sugadintą lauką, palikite būsenos raidę ir serijos numerį, o likusią eilutės dalį palikite ramybėje. Jei įrašo negalima suderinti su jokiu pasirašytu sertifikatu, traktuokite jį kaip paklydusį įrašą ir išveskite jį per pačios CA atšaukimo kelią, o ne trinkite eilutę rankomis.

Netaisykite nukirpdami datą, kad ji tilptų į spėjimą apie metus. Dviejų simbolių kirpimas neperkeliamas tarp rinkinių ir tyliai pakeičia galiojimą, kurį duomenų bazė praneša būsimiems pasikartojančio subjekto ir CRL patikrinimams. Kai pradinės reikšmės atkurti neįmanoma, išduokite iš naujo su nauju serijos numeriu ir užrašykite, kodėl senasis buvo apleistas. Audito pėdsakas yra taisymo dalis, o ne popierizmas aplink jį.

Patikrinkite išdavimą ir CRL generavimą prieš išeidami

Paleiskite vieną išdavimą su ta pačia konfigūracija ir patvirtinkite, kad jis baigiasi be nusiskundimo dėl eilutės numerio. Tada sugeneruokite CRL su openssl ca -gencrl -config openssl.cnf ir patikrinkite, ar jis analizuojamas, nes sugadintas įrašas dažnai iškyla būtent ten, o ne pasirašymo metu.

Apžiūrėkite naują sertifikatą su openssl x509 -noout -dates -serial ir palyginkite jį su eilute, kurią CA ką tik įrašė. Patvirtinkite, kad būsenos raidė ir pasibaigimo data sutampa su sertifikatu, ir patvirtinkite, kad openssl verify -CAfile ca.pem issued.pem grįžta be klaidos. Tada atkurkite suplanuotą išdavimą ir stebėkite pirmą paleidimą, nes antra sugadinta eilutė iš karto praneš apie save.

Susiję straipsniai