Az OpenSSL a projekt leírása alapján:
Egy robusztus, kereskedelmi minőségű, teljes értékű nyílt forráskódú eszközkészlet a Transport Layer Security (TLS) protokollhoz, amit korábban Secure Sockets Layer (SSL) protokollként ismertek. A protokoll megvalósítása egy teljes erősségű, általános célú kriptográfiai könyvtáron alapul, amely önállóan is használható.
Ahogy a leírásból kiderül ez egy TLS kommunikáció implementálását segítő könyvtárcsomag, ami önálló programként is használható. Ez a könyvtár azért olyan fontos, mert a weben a nyílt forráskódú programok többsége ezt alkalmazza a titkosított adatátvitel megvalósítására. Rengeteg algoritmust támogat, folyamatosan fejlesztik és mivel önálló programként is használható, ezért alkalmas arra, hogy a különböző kód implementációinkat is teszteljük.
A könyvben bemutatott CsharpTutorial.CryptoExtensions könyvtár fejlesztésekor az eredmények helyessége ezzel lett ellenőrizve.
OpenSSL beszerzése
Az OpenSSL a https://github.com/openssl/openssl címről szerezhető be forráskód formában. A projekt hivatalos binárisokat nem szállít. Ezért ha binárisra van szükségünk, akkor ez magunknak kell lefordítanunk, vagy használunk egy olyan környezetet, amibe már be van építve.
A legtöbb Linux disztribúció csomagkezelőjéből telepíthető. Windows esetén, ha van a gépünkön git bash és a telepítéskor azt választottuk, hogy telepíteni szeretnénk, akkor rendelkezünk is egy binárissal.
Erről az alábbi parancs kiadásával győződhetünk meg:
openssl version
A heartbleed hiba
Az OpenSSL iránt a bizalom megingott 2014-ben, amikor a Heartbleed névre keresztelt hiba (https://heartbleed.com/) napvilágra került. Ez az akkortájt használt OpenSSL verziók nagy részét érintette. Segítségével HTTPS kommunikáció során a szervergép teljes vagy részleges memóriájának tartalma átmenthető volt a támadó gépére, amiből az bizalmas adatokat nyerhetett ki.
A hiba akkoriban egy pár napra/hétre kellemetlen pillanatokat okozott a fejlesztőknek és az üzemeltetőknek, mivel a sérülékeny OpenSSL verziókat frissíteni kellett.
A hiba utóhatásaként született meg a LibreSSL projekt, amit az OpenBSD fejlesztők indítottak azzal a céllal, hogy kidobáljanak minden olyan dolgot az OpenSSL-ből, ami számukra szükségtelen és a kódot számukra megfelelő minőségűre hozzák. Manapság számos Linux és BSD disztribúció ezt szállítja alapértelmezetten az OpenSSL helyett.
Fejlesztői és felhasználói szemmel nézve azonban nincs sok különbség, mivel a LibreSSL az OpenSSL forkja1. Ebből adódóan ugyan úgy az openssl parancs segítségével tudjuk használni.
OpenSSL receptek
Ebben a szekcióban olyan hasznos parancsokat gyűjtöttem össze, amelyeket a könyv írása és a korábban említett könyvtár fejlesztése közben is alkalmaztam.
Hash számítás szövegből
Hexa kimenettel:
echo -n "szoveg" | openssl md5 -binary | xxd -p
echo -n "szoveg" | openssl sha1 -binary | xxd -p
echo -n "szoveg" | openssl sha256 -binary | xxd -p
echo -n "szoveg" | openssl sha384 -binary | xxd -p
echo -n "szoveg" | openssl sha512 -binary | xxd -p
Base64 kimenettel:
echo -n "szoveg" | openssl md5 -binary | openssl base64
echo -n "szoveg" | openssl sha1 -binary | openssl base64
echo -n "szoveg" | openssl sha256 -binary | openssl base64
echo -n "szoveg" | openssl sha384 -binary | openssl base64
echo -n "szoveg" | openssl sha512 -binary | openssl base64
Hash számítás adott fájl tartalmára
Hexa kimenettel:
openssl md5 -binary fajl.txt | xxd -p
openssl sha1 -binary fajl.txt | xxd -p
openssl sha256 -binary fajl.txt | xxd -p
openssl sha384 -binary fajl.txt | xxd -p
openssl sha512 -binary fajl.txt | xxd -p
Base64 kimenettel:
openssl md5 -binary fajl.txt | openssl base64
openssl sha1 -binary fajl.txt | openssl base64
openssl sha256 -binary fajl.txt | openssl base64
openssl sha384 -binary fajl.txt | openssl base64
openssl sha512 -binary fajl.txt | openssl base64
RSA kulcspár generálása
openssl genrsa -out private-key.pem 2048
openssl rsa -in private-key.pem -pubout -out public-key.pem
A parancsban a 2048 a kulcs bitszámát adja meg. A létrejövő private-key.pem a privát és publikus kulcsot is tartalmazza. A második parancs ebből a fájlból másolja ki csak a privát kulcsot.
PEM és DER formátum közötti konverzió RSA esetén
openssl rsa -inform pem -in private-key.pem -outform der -out private-key.der
openssl rsa -inform der -in private-key.der -outform pem -out private-key.pem
PEM és DER konverzió csak a privát kulcsot is tartalmazó fájok között lehetséges.
DSA kulcspár generálása
openssl dsaparam -outform PEM -out dsaparams.pem 2048
openssl gendsa -out dsa_private.pem dsaparams.pem
openssl dsa -in dsa_private.pem -pubout -out dsa_public.pem
Az RSA-tól eltérően a DSA kulcsgenerálás háromlépéses. Az első dsaparams.pem fog a generálás alapjául szolgálni. A folyamat végeztével ez a fájl törölhető.
ECDsa kulcspár generálása
openssl ecparam -name prime256v1 -genkey -noout -out ecdsa-private-key.pem
openssl ec -in ecdsa-private-key.pem -pubout -out public-key.pem
A name paraméter a használt görbe nevét adja meg. A használható görbék nevei az alábbi parancs segítségével kérhető le:
openssl ecparam -list_curves
Publikus és privát kulcspár generálása SSH eléréshez
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ed25519 -C "your_email@example.com"
Az első parancs RSA algoritmust alkalmaz 4096 bites biztonsággal, a második parancs pedig elliptikus görbe alapú titkosítást ed25519 algoritmussal.
Mindkét parancs esetén a generálás közben megadható egy jelszó, ami titkosítja tárolás közben ezeket a kulcsokat. A jelszó megadása nem kötelező, de ebben az esetben a kulcsok nem titkosítottan tárolódnak a fájlrendszeren.
-
A szoftverfejlesztés területén a fork, azaz a szoftverfejlesztési projekt elágaztatása során a fejlesztők veszik a szoftvercsomag forráskódját és megkezdik annak az eredeti fejlesztéstől független továbbfejlesztését, egy új szoftverterméket hozva létre. – https://hu.wikipedia.org/wiki/Fork_(szoftverfejleszt%C3%A9s)↩