openssl ca: virheellinen vanhenemispäivä index.txt-tiedostossa ja miten se korjataan
CA kieltäytyy myöntämästä, koska yhtä index.txt-tiedoston riviä ei voi jäsentää. Kopioi CA:n tila, pura merkintä ja sovita se sitten allekirjoitettuun varmenteeseen.
Myöntöajo pysähtyy kohtaan entry 22: invalid expiry date, ja edessäsi oleva pyyntö on aivan kunnossa. Vika tulee CA:n tietokannan jäsentimestä, ei CSR:stä eikä VPN-asiakkaasta, joka lopulta esittää varmenteen. Tämä ero ratkaisee kaiken seuraavan: tietue on väärin muodostettu, joten korjaus kuuluu CA:n tilaan eikä pyyntöön tai vastapuolen asetukseen. Käsittele numeroitua merkintää rivinä tiedostossa index.txt, ja ongelma kutistuu rajatuksi datakysymykseksi, johon on tarkistettava vastaus.
Lue virhe tietokantaa koskevana valituksena
Jokainen openssl ca kutsu käy läpi tekstimuotoisen tietokantansa ennen kuin se allekirjoittaa mitään. Jokaisella rivillä on tilakirjain, vanhenemisen aikaleima, valinnainen mitätöinnin aikaleima, sarjanumero heksadesimaalina, tiedostonimi ja subjekti. Kun yhtä kenttää ei voi jäsentää, komento ilmoittaa rivin numeron ja pysähtyy sen sijaan, että arvaisi tietueen loppuosan.
Tämä pysähdys on suojaava eikä pedanttinen. Tietue, jota työkalu ei voi lukea, jättää sen kykenemättömäksi ratkaisemaan, onko pyydetty subjekti jo olemassa, onko sarjanumero jo jaettu tai mitä seuraavan CRL:n pitäisi sisältää. Huonon rivin yli jatkaminen tuottaisi juuri sen hiljaisen epäjohdonmukaisuuden, joka nousee esiin kuukausia myöhemmin, yleensä mitätöinnin aikana, jota kukaan ei osaa selittää. Lue viesti datasta kertovana valituksena, niin tutkinta pysyy CA-hakemiston sisällä.
Kopioi CA:n tila ennen kuin kosket mihinkään
Ota tilannekuva koko CA-hakemistosta, ei vain tietokantatiedostosta. Hakemisto, sen attribuuttitiedosto, sarjanumeron ja CRL-numeron tiedostot, yksityinen avain ja myönnetyt varmenteet osallistuvat kaikki myöhempiin toimintoihin, ja korjaus, joka palauttaa yhden ja jättää muut huomiotta, synnyttää toisen tapauksen. Käytä CA:n omaa varmuuskopiorutiinia, jos sellainen on, ja keskeytä ajastettu myöntö työn ajaksi.
Kirjaa OpenSSL-koonnos ja asetustiedosto, jonka epäonnistunut komento todella latasi. Asennukset pitävät usein enemmän kuin yhtä CA-hakemistoa, ja virhe tarkoittaa jotain vain sitä tietokantaa vasten, jonka valittu asetustiedosto nimeää.
Etsi merkintä ja pura sen päivämääräkenttä
Ilmoitettu rivinumero lasketaan ensimmäisestä tietueesta, joten sed -n '22p' index.txt osuu ongelmalliseen merkintään, kun olet varmistanut, ettei sen yläpuolella ole tyhjiä rivejä tai kommentteja. Tulosta rivi näkyvin erottimin, sillä sarkaimet ja lopun välilyönnit ovat yleisiä ja näkymättömiä tavallisessa muokkausikkunassa.
Vanhenemiskenttä on aikaleima, jonka leveys riippuu vuodesta. Arvot vuoteen 2049 asti kirjoitetaan UTCTime-muodossa muotoon YYMMDDHHMMSSZ, kun taas myöhemmät arvot siirtyvät GeneralizedTime-muotoon nelinumeroisella vuodella. Tietue, joka sekoittaa kaksi muotoa tai kantaa kaksinumeroista vuotta siellä, missä jäsennin odottaa nyt neljää, epäonnistuu juuri tässä kohdassa. Samoin katkaistu kenttä, jonka keskeytynyt kirjoitus on jättänyt.
Vertaa tietuetta varmenteeseen, johon se viittaa, älä toisen CA:n tiedostoon. Allekirjoitettu varmenne on auktoriteetti siihen, mitä voimassaolon pitäisi sanoa, ja se on jo olemassa jäsennettävänä objektina.
Korjaa tietue allekirjoitetun varmenteen mukaan
Lue todelliset päivämäärät komennolla openssl x509 -in issued.pem -noout -dates -serial -subject. Muunna notAfter sen aikaleiman leveydeksi, jonka koontiversiosi kirjoittaa kyseiselle vuodelle, ja varmista ennen yhdenkin merkin muuttamista, että sarjanumero vastaa merkintää, jota aiot muokata.
Muokkaa vain rikkoutunutta kenttää, pidä tilakirjain ja sarjanumero, ja jätä rivin loppu rauhaan. Jos tietuetta ei voi sovittaa mihinkään allekirjoitettuun varmenteeseen, kohtele sitä harhautuneena merkintänä ja poista se CA:n oman mitätöintipolun kautta sen sijaan, että poistaisit rivin käsin.
Älä korjaa leikkaamalla päivämäärää vuotta koskevan arvauksen mukaan. Kahden merkin leikkaus ei ole siirrettävissä koontiversioiden välillä, ja se muuttaa hiljaa voimassaoloa, jonka tietokanta ilmoittaa tuleville duplikaattisubjektin ja CRL:n tarkistuksille. Kun alkuperäistä arvoa ei voi palauttaa, myönnä uudelleen uudella sarjanumerolla ja kirjaa, miksi vanha hylättiin. Auditointijälki on osa korjausta, ei sen ympärillä olevaa paperityötä.
Varmista myöntö ja CRL:n luonti ennen kuin lähdet
Aja yksi myöntö samalla asetuksella ja varmista, että se valmistuu ilman rivinumeroa koskevaa valitusta. Luo sitten CRL komennolla openssl ca -gencrl -config openssl.cnf ja tarkista, että se jäsennetään, sillä vahingoittunut tietue tulee usein esiin juuri siellä eikä allekirjoituksen aikana.
Tarkastele uusi varmenne komennolla openssl x509 -noout -dates -serial ja vertaa sitä riviin, jonka CA juuri kirjoitti. Varmista, että tilakirjain ja vanhenemispäivä vastaavat varmennetta, ja varmista, että openssl verify -CAfile ca.pem issued.pem palaa ilman virhettä. Palauta sitten ajastettu myöntö ja seuraa ensimmäistä ajoa, sillä toinen väärin muodostettu rivi ilmoittaa itsestään heti.