Alapvető műveletek az OpenSSL program segítségével

OpenSSL

Az OpenSSL ingyenes, nyílt forráskódú programcsomag (és programkönyvtár), amelynek segítségével nagyon sok kriptográfiai művelet könnyen és gyorsan elvégezhető. Az OpenSSL a www.openssl.org címről tölthető le, számos platformon elérhető, a legtöbb Linux disztribúció már eleve tartalmazza, de Windows alatt is működik.

Az alábbiakban az OpenSSL parancssoros változata segítségével mutatunk be néhány alapvető nyilvános kulcsú kriptográfiai műveletet, amelyekre szükségünk lehet, ha OpenSSL-lel (és nem pl. Internet Explorerrel) szeretnénk kulcsot generálni, tanúsítványkérelmet létrehozni stb. Az OpenSSL számos más funkciót is tartalmaz, részletes dokumentációja az www.openssl.org címen érhető el.

  Ha a kriptográfiai alapfogalmakról szeretne olvasni, kattintson ide.

Egy OpenSSL parancs a következő módon épül fel:

openssl parancs_neve paraméterek

Az OpenSSL általában a standard inputról olvassa a bemenetet, és a standard outputra írja a kimenetet. A bemenetet alapesetben PEM (base64 kódolt) formátumban fogadja, és PEM formátumban írja. Ha mást szeretnénk (pl. azt szeretnénk, hogy az OpenSSL szövegesen írja ki az eredményt), azt külön meg kell mondanunk.

A lehetséges OpenSSL parancsok az
openssl help
paranccsal listázhatóak ki. Az egyes parancsok paramétereiről az
openssl parancs_neve -help
parancs segítségével kaphatunk leírást.

RSA kulcspár generálása

Egy 2048 bit hosszú RSA kulcspár generálásához az alábbi parancsot kell kiadnunk:
openssl genrsa -passout pass:<jelszó> -aes256 -out kulcspar.pem 2048
Az így létrejött kulcspar.pem fájl tartalmazza a nyilvános kulcsot és a magánkulcsot is. A kulcspar.pem fájl base64 kódolással tartalmazza ezeket az információkat, a fenti parancssor szerint az AES algoritmussal titkosítva. A titkosítás a parancssorban megadott jelszóval, mint kulccsal történik. Ha elhagyjuk a -passout pass:<jelszó>paramétert, akkor a jelszót nem a parancssorból adjuk meg, hanem a standard inputról kéri be az OpenSSL. A kulcspar.pem fájlt titokban kell tartanunk, mert tartalmazza a magánkulcsunkat. Azt javasoljuk, hogy a magánkulcsot mindig védett, lehetőleg titkosított módon tároljuk.

Ha valami miatt kíváncsiak vagyunk a kulcsok pontos értékére, a következő paranccsal tudhatjuk ezt meg:

openssl rsa -text -noout -in kulcspar.pem -passin pass:<jelszó>

PKCS#10 tanúsítványkérelem létrehozása

Ha azt szeretnénk, hogy nyilvános kulcsunkhoz egy hitelesítés szolgáltató tanúsítványt bocsásson ki, akkor a nyilvános kulcsot szabványos PKCS#10formában kell eljuttatnunk a szolgáltatóhoz. A PKCS#10 tanúsítványkérelem tartalmazza a nyilvános kulcsunkat és azt, hogy milyen adatokat szeretnénk, ha a szolgáltató feltüntetne rólunk a tanúsítványunkban. A PKCS#10 kérelmet a saját magánkulcsunkkal kell aláírnunk, a hitelesítés szolgáltató ebből állapítja meg, hogy valóban nálunk van a hozzá tartozó magánkulcs.

Ha a fentieknek megfelelően már generáltunk egy kulcspárt, akkor a következő paranccsal hozhatunk létre PKCS#10 tanúsítványkérelmet a kulcspár alapján:

openssl req -new -key kulcspar.pem -out tanusitvanykerelem.pem -passin pass:<jelszó>

A kérelem elkészítésekor az OpenSSL bekéri tőlünk a tanúsítványba kerülő adatainkat. Nem muszáj mindent kitöltenünk, egy pont (.) beírásával jelezhetjük, hogy az adott mező üres maradjon. A program elkéri az országunk kétbetűs kódját (Country Name - Magyarország esetén HU), nemzetközi szoftverről lévén szó elkéri az USA-beli állam nevét (State or Province Name - a magyar felhasználók egy pont beírásával hagyják üresen), városunk nevét (Locality - pl: Budapest), cégünk, szervezetünk nevét (Organization Name - pl. Saját Kft.), a szervezeten belüli egységünk nevét (Organizational Unit Name - pl. Számlázási Osztály), a saját nevünket (Common Name - pl. Kovács János), és az e-mail címünket (Email Address - pl. en@valahol.net). Ezt követően bekér néhány további adatot is, ezt nyugodtan hagyjuk üresen.

Ha webszerver tanúsítványt kérünk, akkor a Common Name mezőbe ne a saját nevünket, hanem a szerverhez tartozó domain címét adjuk meg (pl: www.e-szigno.hu).

A PKCS#10 formátumú tanúsítványkérelem a tanusitvanykerelem.pem fájlba kerül.

A magánkulcsot nem kell eljuttatni a hitelesítés szolgáltatóhoz, a tanúsítvány kibocsátása során a hitelesítés szolgáltatónak nincs szüksége a magánkulcsunkra. A hitelesítés szolgáltató a magánkulcsot nem ismeri meg, így - pl. elektronikus aláírásra szolgáló tanúsítványok esetén - a hitelesítés szolgáltató nem tud aláírást készíteni a nevünkben. Általában is igaz, hogy a magánkulcsunkat senkinek ne adjuk ki, ez alól egyedül a titkosító tanúsítványokhoz tartozó magánkulcsok jelentenek kivételt, amelyet kulcsletét szolgáltatás keretében letétbe szokás helyezni.

Ha létrejött a PKCS#10 kérelmünk, szerződést köthetünk egy hitelesítés szolgáltatóval, és majd ha elküldjük neki a PKCS#10-es kérelmet (általában a PKCS#10 tanusitvanykerelem.pem fájl tartalmát kell bemásolnunk egy webes igénylőlapra; a mi weboldalunkon pl. itt van ilyen igénylőlap), a hitelesítés szolgáltató visszaküldi a tanúsítványt.

Ha a kérelmet csak tesztelési célból hoztuk létre, "önhitelesített" tanúsítványt is készíthetünk hozzá. Az így létrehozott önhitelesített tanúsítvány formailag pontosan olyan, mint egy igazi tanúsítvány, de egy nem mások által is elismert hitelesítés szolgáltató írja alá, hanem a hozzá tartozó magánkulccsal saját magunk hitelesítjük. Ezzel a paranccsal hozhatunk létre önhitelesített tanúsítványt:

openssl req -new -key kulcspar.pem -x509 -out onHitelesitettTanusitvany.pem -passin:<jelszó>

Az ilyen tanúsítványt várhatóan senki más nem fogja elfogadni.

Tanúsítványban lévő adatok vizsgálata

Tegyük fel, hogy van egy tanúsítványunk, és meg szeretnénk nézni a tartalmát. Ezt megtehetjük a Windows segítségével is (a tanúsítványt .cer kiterjesztéssel kell elmentenünk, és ezt követően megnyithatjuk), de most erre az OpenSSL programot fogjuk használni.

Ha a tanúsítvány PEM formátumban van (tehát base64 kódolással), akkor ezt a következő paranccsal tehetjük meg:

openssl x509 -text -noout -in tanusitvany.pem
Előfordulhat, hogy a tanúsítvány DER kódolással szerepel, ekkor a következő paranccsal vizsgálhatjuk meg:
openssl x509 -text -noout -inform der -in tanusitvany.cer
(A cer kiterjesztés semmitmondó, PEM és DER formátumú tanúsítványt is szokott rejteni.)

Ha van egy DER formátumú tanúsítványunk, a következő paranccsal konvertálhatjuk át PEM formátumúvá:

openssl x509 -inform der -in tanusitvany.cer -out tanusitvany.pem
Ha PEM formátumú tanúsítványt szeretnénk DER formátumba konvertálni, akkor ezt a parancsot használhatjuk:
openssl x509 -outform der -in tanusitvany.pem -out tanusitvany.cer

Tanúsítvány és magánkulcs összekombinálása PFX fájlba

Tegyük fel, hogy generáltunk egy kulcspárt, létrehoztunk vele egy PKCS#10 tanúsítványkérelmet, ezt elküldtük egy hitelesítés szolgáltatónak, aki tanúsítványtbocsátott ki a kulcshoz. Tegyük fel, hogy a tanúsítvány PEM formátumban áll a rendelkezésünkre egy tanusitvany.pem nevű fájlban, a tanúsítványhoz tartozó magánkulcsunk pedig a kulcspar.pem fájlban helyezkedik el.

A két fájlból a következő paranccsal hozhatunk létre egy PKCS#12 formátumú (PFX) fájlt, amely egyaránt tartalmazza a hitelesítés szolgáltató által kibocsátott tanúsítványt és a hozzá tartozó magánkulcsot.

openssl pkcs12 -export -inkey kulcspar.pem -in tanusitvany.pem -passin pass:<jelszó> -out tanusitvany_es_magankulcs.pfx -passout pass:<pfx_jelszó>

A fenti parancssorban két jelszót kell megadnunk: az egyik jelszó (passin) a kulcspar.pem fájl kititkosításához szükséges, a másik pedig az a jelszó, amelyikkel a pfx fájlt titkosítjuk majd. A PFX fájlt titokban kell tartanunk, mert a magánkulcsunkat is tartalmazza, ezért célszerű jelszóval védve, titkosított formában tárolni. Ezt követően már csak a PFX fájlra lesz szükségünk, így a magánkulcsunkat tartalmazó kulcspar.pem fájlt célszerű megsemmisítenünk.

Sok, a magánkulcsunkat is használó szoftvernek, együtt kell megadnunk a tanúsítványt és a magánkulcsot, gyakran PFX formátumban. Például, ha Windowsban kettőt kattintunk egy PFX fájlon, akkor a tanúsítványt a magánkulcsunkkal együtt importálhatjuk a Windows tanúsítványtárába.

Kriptográfiai lenyomat képzése

OpenSSL segítségével kriptográfiai lenyomatot is képezhet egy fájlról kriptográfiai lenyomatot. Ha a lenyomatot SHA-256 algoritmus segítségével szeretné létrehozni:
openssl dgst -sha256 < dokumentum.doc
A program alapesetben base64 kódolással írja ki a lenyomatot, amely pl. így nézhet ki:
f423871f6939c650d9aea5f833a156e050a3130f5050c67474177d21cbac61f9

Ha az SHA-1 algoritmus segítségével szeretné létrehozni a lenyomatot:

openssl dgst -sha1 < dokumentum.doc