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)↩