PKCS12, PEM ili DER: šta VPN klijent zapravo treba
Pakovanje odlučuje da li će vaš klijent uvesti identitet, a ne da li mu se vjeruje. Uporedite PKCS12, PEM i DER, pa provjerite.
U raspravama o certifikatima kruže dvije tvrdnje. Prva je da je .p12 jaka opcija a .pem labava; druga da tekstualna datoteka mora biti sigurna za slanje jer je možete pročitati. Nijedna ne izdrži ni minutu provjere.
PKCS12, PEM i DER opisuju kako se certifikatni objekti pakuju i kodiraju. Oni ne odlučuju ko je druga strana, je li izdavalac pouzdan ili treba li datoteci lozinka.
Šta klijent prihvata jeste pitanje kompatibilnosti. Šta datoteka sadrži jeste pitanje identiteta. Razdvojite to dvoje i većina grešaka pri uvozu prestaje biti tajanstvena.
Tri kontejnera, jedan model objekata
Pođite od onoga što zaista imate. Certifikat je potpisana izjava o javnom ključu. Privatni ključ je odvojeni materijal koji dokazuje da kontrolišete taj ključ. Lanac je skup izdalaca koji povezuju vaš certifikat s korijenom kojem klijent vjeruje. Sva tri postoje bez obzira na pakovanje.
PKCS12 datoteka, obično .p12 ili .pfx, kontejner je definisan u RFC 7292 koji može nositi privatni ključ, jedan ili više certifikata i lanac u jednom bloku zaštićenom lozinkom, s aliasom koji imenuje identitet. PEM datoteka je tekstualni okvir prema RFC 7468: base64 tijelo između redova BEGIN i END, a jedna datoteka može držati nekoliko blokova uzastopno. DER je binarno kodiranje istih ASN.1 struktura, a PEM tijelo je doslovno DER umotan u base64.
Ta posljednja rečenica vrijedi zapamtiti. Pretvaranje PEM u DER prepisuje okvir, ne sadržaj, a povratno pretvaranje vraća izvorne bajtove.
| Container | Can hold | Does not decide |
|---|---|---|
| PKCS12 (.p12, .pfx) | Key, leaf certificate, chain, alias, password | Which root the client trusts |
| PEM (.pem, .crt, .cer) | Any number of base64 blocks | Whether the private key is present |
| DER (.der, .cer) | One binary structure | The object type, whatever the extension says |
Kodiranje nije šifrovanje
Base64 je transportna abeceda. Ne skriva ništa i svako može dekodirati PEM blok u shellu. DER datoteka je binarna i jednako javna. Nijedno svojstvo nije zaštita i nijedno ne implicira da lozinka postoji.
Prava zaštita je u materijalu ključa. PKCS12 paket može šifrovati svoj sadržaj ključem izvedenim iz lozinke. PEM privatni ključ može se šifrovati starim blokom zaglavlja ili držati u PKCS#8 EncryptedPrivateKeyInfo. Certifikat sam po sebi ne čuva ništa tajno, zato izvoz koji je dao samo certifikat ostavlja klijenta bez mogućnosti autentifikacije, u koji god format ga umotali.
Ekstenzija je nagovještaj, ne ugovor. Datoteke koje završavaju na .cer i .crt pojavljuju se u oba kodiranja, a uređaji dovoljno često izvoze DER certifikate pod imenima .pem da pogađanje po sufiksu košta jedno popodne. Čitajte prve bajtove: PEM datoteka počinje redom BEGIN, dok DER počinje s 0x30 jer je vanjska struktura SEQUENCE.
Zašto uvoz zapravo pada
Poruke grešaka klijenta sabijaju nekoliko različitih problema u jednu rečenicu o nevažećem certifikatu, pa ih razdvojite po uzroku. Najčešća je neusklađenost kodiranja: klijent koji parsira PEM vraća grešku parsiranja na DER datoteci, a popravka je pretvaranje, ne novi certifikat. Druga je nedostajući ključ, gdje je certifikat ispravan a identitet se ne može dokazati. Treća je lanac, gdje paket bez međucertifikata izgleda ispravno u dijalogu za uvoz, a padne tokom rukovanja.
Parametri šifrovanja uzrokuju četvrtu i ona izgleda tačno kao pogrešna lozinka. Stariji uređaji izvozili su PKCS12 datoteke s RC2-40 i 3DES, koje OpenSSL 3 odbija ako nije učitan legacy provajder. Ponovni izvoz s uređaja s AES-256-CBC i PBKDF2 trajno je rješenje. Ostaviti stare šifre trajno uključene na klijentskoj mašini zbog jedne datoteke loša je trgovina.
Peta je dvosmislenost. Kontejner s dva ključa i dva certifikata, ili PEM datoteka s tri CERTIFICATE bloka, prisiljava klijenta da bira, a njegov izbor je često prosto prva stavka. Kada tunel ustane s pogrešnim identitetom, to je obično razlog.
Provjerite prije pretvaranja
Čitajte strukturu bez ispisivanja tajni. openssl pkcs12 -in bundle.p12 -info -noout prijavljuje algoritme šifrovanja i alijase uz potiskivanje izlaza ključa i certifikata, a priručnik openssl-pkcs12 dokumentuje zastavice. Uklanjanje -noout i dodavanje -nodes služi pravljenju datoteka koje namjeravate čuvati, ne brzom pogledu, jer ispisuje privatni ključ otvoreno.
Za certifikat openssl x509 -in cert.pem -noout -subject -issuer -dates odgovara na ono na šta dijalog za uvoz neće, a dodano -ext subjectAltName pokazuje imena za koja je certifikat stvarno važeći. Ako je datoteka DER, dodajte -inform DER; ta jedna zastavica rješava većinu grešaka unable-to-load.
Uparivanje ključa s certifikatom je mehanički posao i vrijedi ga obaviti prije svakog uvoza:
openssl x509 -in cert.pem -noout -pubkey | openssl sha256openssl pkey -in key.pem -pubout | openssl sha256
Identični sažeci znače da par pripada zajedno. Različiti sažeci znače da imate pogrešan ključ i nikakvo pretvaranje formata to neće promijeniti.
Šta format nikada ne mijenja
Odluke o povjerenju donose se iznad kontejnera. Klijent prolazi lanac do korijena u svom skladištu, provjerava prozor važenja, provjerava proširenu upotrebu ključa za autentifikaciju klijenta i na strani servera provjerava da se ime koje je pozvao pojavljuje u certifikatu. Nijedan od tih koraka ne čita ekstenziju datoteke.
Zato je preimenovanje datoteke dok greška ne nestane tako pouzdan način da gubite vrijeme. Uvoz uspije, identitet je i dalje pogrešan, a kvar se vrati tokom rukovanja gdje je poruka manje korisna. Zato i paket izvezen prije dvije godine uvozi se čisto i opet bude odbijen: datum isteka putovao je u certifikatu, ne u imenu datoteke.
Redoslijed koji izbjegava popravke
Pitajte dokumentaciju klijenta koja kodiranja prihvata i koji kontejner očekuje za identitet klijenta, pa pogledajte šta su vam dali. Ako klijent želi jedan uvozni identitet a imate odvojene PEM datoteke, napravite paket jednom s lozinkom koju kontrolišete i sačuvajte izvore. Ako želi PEM, izvucite ključ i lanac, a zatim uklonite međudatoteke kroz proces rukovanja akreditivima koji vaš tim već koristi.
Poslije uvoza provjerite identitet, ne dijalog: subjekt, izdavalac, istek i ime koje će klijent predstaviti. Prijateljsko ime na listi je oznaka, ne provjereni identitet. Ako tunel zatim padne, otklanjate greške u autentifikaciji ili rutiranju umjesto u pakovanju, što je mnogo kraći razgovor.