RSA-selityksen kirjaimet nimeävät kenttiä yhden objektin sisällä, eivät tiedostoja, joita PKI-työkalu jakaa. Yksityisen avaimen tiedosto sisältää rakenteen, jonka ensimmäiset kentät ovat julkisia ja jonka myöhemmät kentät eivät saa koskaan lähteä koneelta, joka päättää tunnelin. Näiden kahden tosiseikan välissä ovat useimmat käytännön kysymykset siitä, mikä tiedosto vastaa mihinkin kysymykseen. Tämä käsikirja lukee ensin rakenteen ja sitten komennot, jotka tutkivat sitä sitä läikyttämättä.

Varmista, että avain on RSA, ennen kuin etsit alkulukuja

Sertifikaatti todistaa, että jokin avain on olemassa ja allekirjoitettu; se ei todista, että avain on RSA. Järjestelmiä voidaan rakentaa elliptisille käyrille tai Ed25519:lle, ja sama hakemistorakenne palvelee niitä kaikkia. Tarkista algoritmi ennen kuin alat etsiä alkutekijöitä, joita siellä ei koskaan ollut.

Nämä kolme vain luku -komentoa vastaavat kysymykseen ja tallentavat työkalun version.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Versio on tärkeä, koska valintojen nimet ovat siirtyneet pääjulkaisujen välillä. Etsi sertifikaatin tulosteesta julkisen avaimen algoritmirivi ja avaimen koko; avaimen tulosteessa RSA-avain tulostaa moduulin ja julkisen eksponentin. Elliptisen käyrän avain tulostaa sen sijaan nimetyn käyrän, eikä mikään haku tuota siitä n:ää tai q:ta.

Lue rakenne base64:n sijaan

PEM on otsikkoriveihin kääritty base64, ja sen purkaminen antaa DER:n, joka on sarjamuotoinen rakenne eikä yksi valtava kokonaisluku. RSA-yksityisavaimet kulkevat kahdessa yleisessä säiliössä, PKCS#1 ja PKCS#8, ja molemmat ratkeavat samaan lukujoukkoon.

Kahden alkuluvun tapauksessa yksityinen rakenne kantaa yhdeksän kenttää: version, moduulin n, julkisen eksponentin e, yksityisen eksponentin d, alkuluvut p ja q, kaksi CRT-eksponenttia ja CRT-kertoimen. RFC 8017 luku A.1 määrittelee nuo osat ja ASN.1-asettelun, ja se sallii myös useamman kuin kaksi alkulukua, minkä vuoksi yleinen jäsennin voi tulostaa ylimääräisiä alkulukumainintoja. Huomaa järjestys, sillä se selittää yleisen virheen: julkinen puolisko on tallennettu yksityisen tiedoston sisään, joten julkisen kentän läsnäolo ei tee tiedostosta jakokelpoista. Kaikki sen jälkeen on aineistoa, jonka on jäätävä isäntäkoneelle.

Koodaus lisää kerroksen, joka sekoitetaan helposti sisältöön. openssl asn1parse piirtää rakenteen puuna, jolloin kenttien järjestys tulee näkyviin, eikä se salaa mitään eikä kerro, onko avain käyttökelpoinen.

Parita sertifikaatti avaimeen tulostamatta avainta

Seuraava kysymys on yleensä, kuuluvatko sertifikaatti ja avain yhteen. Moduulien vertailu vastaa siihen, mutta kopioi myös yksityistä lähellä olevaa aineistoa terminaalitulosteeseen, joka voi päätyä tikettiin. Julkisten puoliskojen vertailu vastaa samaan kysymykseen ilman mitään arkaluontoista ruudulla.

openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH

Identtiset tiedostot tarkoittavat, että sertifikaatti kantaa tuon avaimen julkista puoliskoa, ja ero tarkoittaa, että sinulla on väärä pari. Tämä epäsuhta on yleisin syy tunneliin, joka neuvottelee iloisesti ja kieltäytyy sitten todennuksesta. Poista sen jälkeen kaksi väliaikaista tiedostoa; niissä ei ole mitään salaista, mutta siisti työhakemisto on helpompi järkeillä kesken tapahtuman.

Tiedä, mitä naapuritiedostot eivät ole

Sertifikaatti ei ole salattu julkinen avain, jonka vastapuoli avaa CA-sertifikaatilla; se on allekirjoitettu sidos julkisen avaimen ja identiteettitietojen välillä. CA:n yksityinen allekirjoitusavain pysyy erillään sen omasta sertifikaatista ja jokaisesta asiakasavaimesta. Pyyntökään ei ole sertifikaatti: se kantaa pyydetyt tiedot ja julkisen avaimen sekä pyynnön yli tehdyn allekirjoituksen, mikä tekee siitä ilmoittautumisen syötteen eikä todistetta oikeudesta.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

Kaksi noista merkinnöistä sekoitetaan RSA-parametreihin tarpeeksi usein, että ne on nimettävä kahdesti. Diffie-Hellman-parametritiedosto sisältää ryhmäparametrit avaimen muodostamiseen eikä yhtään RSA:n alkulukua, vaikka se tulostuu myös suurena alkulukuna. Peruutuslista julkaisee sertifikaattien tilan eikä ole paikka, johon yksityinen eksponentti voisi piiloutua.

Jokaisen inventaaririvin tulisi siksi kirjata neljä asiaa: objektin tyyppi, omistaja, tarkoitus ja se, sisältyykö yksityistä aineistoa. Viimeinen sarake päättää, minne tiedosto saa kopioitua, ja juuri se jää ihmisiltä väliin.

Kirjaa paritus ja tarkista sitten kättely

Ennen kuin muutat mitään, tallenna tarkistuksen tuloste päivämäärän ja OpenSSL-version kanssa. Myöhempää kierrätystä voidaan silloin verrata todisteisiin eikä muistiin.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Julkisen avaimen vertailun jälkeen käy läpi polku, joka kuluttaa parin: nosta tunneli, varmista että sertifikaatti esitetään ja hyväksytään, ja tarkista, minkä identiteetin yhdyskäytävä kirjasi. Jos avain ja sertifikaatti täsmäävät ja todennus silti epäonnistuu, vika on luottamuksessa, identiteetin kartoituksessa tai käyttöoikeuskäytännössä eikä parissa.

Pidä palautusta varten edellinen avain ja sertifikaatti päivätyssä hakemistossa ja palauta molemmat yhdessä, ei koskaan vain toista. Avain ilman sertifikaattiaan ja sertifikaatti ilman avaintaan epäonnistuvat ulospäin samalla tavalla, mikä tekee puoliksi palautetuista pareista kalliita selvittää kahdelta yöllä.

Aiheeseen liittyvät artikkelit