Tanúsítvány- és privát kulcs-illesztő

Egy szerver tanúsítványa és a vele együtt telepíteni kívánt privát kulcs beilleszthető, és az oldal megválaszolja azt a kérdést, amelyen egy üzembe helyezett oldal elbukik: a két elem ugyanabból a kulcspárból származik-e? A válasz nem találgatás a moduluszhossz vagy az ujjlenyomatok alapján — az oldal a privát kulccsal aláír egy rögzített kihívást, és az aláírást a tanúsítványban lévő nyilvános kulccsal ellenőrzi. Ha az ellenőrzés sikeres, a két elem összetartozik; ha nem, a konfiguráció szerkesztése nem teszi működőképessé őket. Mindkét olvasat egymás mellett látható az algoritmussal, a kulcshosszal, a tárgykulcs-azonosítóval és a nyilvános kulcs ujjlenyomatával, és a beillesztett tartalom semmi esetben nem hagyja el a böngészőt.
1. Tanúsítvány vagy lánc
Tetszőleges számú blokk illeszthető be. Minden tanúsítvány minden kulccsal összevetésre kerül, így egy lánc és egy kulcs pontosan megmutatja, a lánc melyik tanúsítványához tartozik a kulcs — gyakori meglepetés olyan szervernél, amely a csomagból a rossz tanúsítványt szolgálja ki. PEM, csupasz base64- vagy hexadecimális törzs és PKCS#7 .p7b fájl egyaránt beolvasható; a tanúsítvány-ellenőrző a kulcs tisztázása után a tanúsítványt vizsgálja.
2. Privát kulcs vagy a nyilvános kulcs
A PKCS#8 (BEGIN PRIVATE KEY), a PKCS#1 (BEGIN RSA PRIVATE KEY), a SEC1 (BEGIN EC PRIVATE KEY) és a csupasz SPKI nyilvános kulcs (BEGIN PUBLIC KEY) egyaránt értelmezhető, akárcsak a base64 vagy hexadecimális formában beillesztett kulcsfájl. A titkosított PKCS#8 kulcsot (BEGIN ENCRYPTED PRIVATE KEY) a böngésző nem tudja olvasni, ezért ennek megfelelően jelölődik, a jelmondatot eltávolító paranccsal együtt.
még nincs ellenőrzés
A minta egy önaláírt tanúsítvány és a hozzá tartozó privát kulcs, mindkettő ehhez az oldalhoz készült, és nem véd semmit. Másik kulccsal való cserével a másik ítélet látható, vagy a privát kulcs helyére a nyilvános kulcs blokkja illesztve láthatóvá teszi a nyilvános kulcs egyezését.
Privát kulcs bármely weboldalra illesztése előtt érdemes még egyszer átgondolni. Ez az oldal egyetlen sima JavaScript-fájl, nem tölt be semmit semmilyen helyről, és nem küld kérést, így a kulcs a lapon belül kerül beolvasásra, felhasználásra és elfeledésre. Ez azonban inkább egy olyan ígéret, amelyet olvasható kód ad, nem pedig egy látható hálózattól származó garancia: éles kulccsal dolgozva érdemes offline dolgozni, és megfontolni, hogy a legbiztonságosabb ellenőrzés ugyanaz az openssl parancs a saját szerveren. Az itt beillesztett kulcs soha nem tárolódik, soha nem kerül fájlba, és soha nem küldődik el sehova — még az exportgombok sem, amelyek a kulccsal kapcsolatos megállapításokat írják ki, a kulcsot soha nem.
Miért az aláírás a válasz. Két fájl hasonlónak tűnhet, és mégis eltérhet: a legtöbb útmutató az RSA-kulcsokat a modulus alapján hasonlítja össze, ez azonban csak RSA-nál működik, és egy kulcs a helyes modulust hordozhatja sérült kitevővel vagy hibás kitöltéssel. Az oldal a párt úgy igazolja, ahogy egy kézfogás teszi — a privát kulccsal egy rögzített kihívást ír alá, és a tanúsítványban lévő nyilvános kulccsal ellenőrzi az aláírást — így az ítélet egyformán érvényes RSA, ECDSA és Ed25519 esetén. Ha csak a nyilvános fél van beillesztve, a nyilvános kulcs bájtjai magukat hasonlítják össze a tanúsítványban lévőkkel, ami az azonosságra ugyanolyan meggyőző, csak annak igazolása nélkül, hogy valaki birtokolja a privát felet.

Mit nem mond meg az egyezés. Azt, hogy a kulcs az, amelyet a szerver ténylegesen betöltött; hogy a tanúsítvány megbízható-e; hogy a kulcsfájl sértetlen-e a lemezen; vagy hogy valaki más nem másolta-e le a kulcsot. Azt sem tudja megmondani, hogy a tanúsítvány az-e, amelyet az ügyfél kap, mivel egy terheléselosztó vagy egy CDN az oldal előtt másikat szolgálhat ki. Annak ellenőrzésére, hogy egy élő szerver valóban mit mutat be, a openssl s_client -connect example.com:443 -servername example.com -showcerts parancs futtatható, és a kimenete a tanúsítvány-mezőbe illeszthető.

Honnan származnak a fájlok. A tanúsítvány az, amellyel a szerver konfigurálva van, vagy egy böngészőből exportált, vagy egy .p7b csomagból kivett. A privát kulcs az a fájl, amelyet a webszerver induláskor olvas, jellemzően valami ilyesmi, mint a privkey.pem vagy a server.key. Ha a kulcs titkosított, a másolatot előbb fel kell oldani a openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-plain.pem paranccsal, az így kapott fájl illeszthető be, majd a másolat törlendő.
Még nincs ellenőrzés. Fent egy tanúsítvány és egy kulcs illeszthető be, majd az Egyezés ellenőrzése gomb használható. Az ítélet az ehhez tartozó bizonyítékkal itt jelenik meg, a jelentés pedig másolható vagy menthető.
Ugyanez az ellenőrzés az openssllel, a saját gépen
# a tanúsítványban lévő nyilvános kulcs openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256 # a privát kulcsban lévő nyilvános kulcs openssl pkey -in key.pem -pubout | openssl pkey -pubin -outform DER | openssl sha256 # a két kivonat csak akkor egyenlő, ha a pár összetartozik # a régebbi, csak RSA-ra működő módszer: a moduluszok összehasonlítása openssl x509 -in cert.pem -noout -modulus | openssl md5 openssl rsa -in key.pem -noout -modulus | openssl md5
A kivonat-összehasonlítás minden kulcstípusra működik, és egyezik azzal, amit az oldal nyilvános kulcs ujjlenyomatként jelent, míg a modulus-összehasonlítás csak RSA-ra létezik. Egyik sem igazolja, hogy valaki birtokolja a privát felet — ezt a fent említett aláírás-ellenőrzés teszi, ezért ezt alkalmazza az oldal.
Mit tartalmaz a jelentés. Az ítélet, a két olvasat, amelyből született (algoritmus, kulcshossz, görbe, tárgykulcs-azonosító és nyilvános kulcs ujjlenyomata a tanúsítványra és a kulcsra vonatkozóan), és a pontosan lefuttatott teszt. A jelentés soha nem tartalmazza a privát kulcsot: a kulcsot aláírás előállítására használják, és nem íródik a szövegbe, a JSON-ba vagy a vágólapra. A másolt vagy mentett tartalom biztonságosan csatolható jegyhez; a beillesztett kulcs nem, és a vágólapot tekintendő az egyetlen másik helynek, ahol valaha is létezett.

Adatvédelem: a tanúsítványt és a kulcsot az oldal a lapon belül olvassa be, semmi nem töltődik fel, és az oldal egyáltalán nem küld kérést — nincs próbálkozás és nincs keresés ezen az oldalon. Egyező pár létrehozásához az önaláírt tanúsítvány-generátor való; már meglévő kulcshoz tanúsítvány kéréséhez a CSR-generátor; egy tanúsítvány tartalmának olvasásához a tanúsítvány-dekódoló való.