Jednou z najčastejších foriem kryptografie je v súčasnosti kryptografia pomocou dvojice kľúčov. Kryptografia dvojice kľúčov je založená na verejnom kľúči a súkromnom kľúči. Systém informáciu zašifruje verejným kľúčom. Táto informácia sa potom dá dešifrovať pomocou súkromného kľúča.
Tento obľúbený spôsob šifrovania sa používa i pri komunikácii cez pripojenia Secure Socket Layer (SSL) alebo Transport Layer Security (TLS). Napríklad môžeme nakonfigurovať systém Apache, aby poskytol HTTPS - HTTP protokol cez SSL. Toto umožňuje zašifrovať komunikáciu pri protokoloch, ktoré samy o sebe neposkytujú šifrovanie.
Certifikát je spôsob, akým sa distribuuje verejný kľúč a ostatné informácie o serveri a organizácii, ktorá je za ne zodpovedná. Certifikáty môžu byť digitálne podpísané Certifikačnými autoritami (CA). CA je dôveryhodná tretia strana, ktorá potvrdzuje, že informácie, ktoré sa nachádzajú v certifikáte sú pravdivé.
Ak chceme nastaviť bezpečný server, ktorý bude používať šifrovanie pomocou dvojice kľúčov, vo väčšine prípadov je potrebné zaslať požiadavku na podpísanie certifikátu (vrátane nášho verejného kľúča), doklad o firemnej identite a poplatok do CA. CA porovná požiadavku na vydanie certifikátu s našou identitou a pošle nám späť certifikát pre náš server. Druhá možnosť je, že si vytvoríme sebou podpísaný certifikát.
![]() |
Upozornenie - sebou podpísané certifikáty sa vo väčšine produkčných prostredí nedajú použiť. |
---|---|
Ak napríklad zoberieme spomínanú HTTPS komunikáciu, certifikáty podpísané CA poskytujú dve významné funkcie, ktoré sebou podpísané certifikáty nemôžu poskytnúť:
Prehliadače (zvyčajne) automaticky rozpoznajú certifikát a povolia šifrované spojenie bez toho, aby si žiadali potvrdenie od používateľa.
Pri certifikátoch podpísaných CA je garantovaná identita organizácie, ktorá poskytuje webové stránky prehliadaču.
Väčšina webových prehliadačov a počítačov, ktoré podporujú SSL, má zoznam certifikovaných autorít, ktorým automaticky dôverujú. Ak prehliadač zistí, že certifikát je podpísaný CA, ktorá nie je v zozname, spýta sa používateľa či má prijať alebo odmietnuť pripojenie. Niektoré aplikácie môžu generovať chybové hlásenie oznamujúce, že certifikát je sebou podpísaný.
Proces získania certifikátu od CA je celkom jednoduchý. Postupuje sa podľa nasledujúcich krokov:
Vytvoríme dvojicu kľúčov - súkromný a verejný.
Vytvoríme požiadavku na podpísanie verejného kľúča. Požiadavka bude obsahovať informácie o serveri a spoločnosti, ktorá server prevádzkuje.
Odošleme požiadavku s dokumentom o našej identite do CA. Vyberieme si niektorú z certifikačných autorít. Náš výber môže byť na základe predchádzajúcich skúseností alebo skúseností od priateľov alebo na základe finančných faktorov.
Keď sme sa rozhodli pre niektorú z CA, je potrebné ďalej sa riadiť jej pokynmi pre získanie certifikátu.
Ak sa CA dôkladne uistí, že sme ten, za ktorého sa vydávame, vydá nám digitálny certifikát.
Nainštalujeme certifikát na náš server a nastavíme aplikácie, aby tento certifikát použili.
Či už chceme získať certifikát od CA alebo vytvoriť sebou podpísaný certifikát, najskôr musíme vygenerovať kľúče.
Ak má byť certifikát využívaný démonmi služieb ako napríklad Apache, Postfix, Dovecot, atď., je potrebné vygenerovať kľúč, ktorý nebude vyžadovať vstupnú frázu (passphrase). Ak nepoužijeme vstupnú frázu, služby sa budú vedieť naštartovať bez manuálneho vstupu, čo je preferovaný spôsob spúšťania démonov.
V tejto časti sa dozvieme, ako vytvoriť kľúče so vstupnou frázou aj bez nej. Kľúče bez vstupnej frázy potom použijeme na vygenerovanie certifikátu a potom ich budeme môcť použiť s rôznymi démonmi služieb.
![]() |
Spúšťanie bezpečných služieb bez vstupnej frázy je bežné, inak by bolo potrebné vstupnú frázu ručne zadať pri každom spustení služby. Je to však menej bezpečné a v prípade, že niekto neoprávnene získa kľúč, získa tiež neobmedzený prístup k službám servera. |
---|---|
Ak chceme vygenerovať kľúče pre požiadavku o podpísanie certifikátu (CSR), spustíme nasledujúci príkaz v príkazovom riadku:
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.....................++++++
.................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for server.key:
Teraz môžeme zadať vstupnú frázu. Pre najlepšiu bezpečnosť by mala obsahovať aspoň osem znakov. Minimálna dĺžka pri použití -des3 je štyri znaky. Môže obsahovať čísla aj interpunkciu a nemala by byť slovom zo slovníka. Nezabudnite tiež, že vo vstupnej fráze sa rozlišuje veľkosť písmen.
Vstupnú frázu je potrebné kvôli kontrole zadať dvakrát. Ak ju po druhýkrát zadáte rovnako, vygeneruje sa kľúč a uloží sa do súboru
server.key
.
Teraz vytvoríme nezabezpečený kľúč a zmeníme mená kľúčov:
openssl rsa -in server.key -out server.key.nezabezpeceny
mv server.key server.key.zabezpeceny
mv server.key.nezabezpeceny server.key
Nezabezpečený kľúč sa teraz volá server.key
a môžeme ho použiť na vygenerovanie CSR bez vstupnej frázy.
Ak chceme vytvoriť CSR, spustíme nasledujúci príkaz v príkazovom riadku:
openssl req -new -key server.key -out server.csr
Po zadaní príkazu bude potrebné zadať vstupnú frázu. Ak zadáme správnu vstupnú frázu, môžeme zadať meno organizácie (Company Name) a ďalšie údaje, ako názov webu (Site Name), Email Id, atď. Po zadaní všetkých detailov sa vygeneruje CSR súbor s názvom
server.csr
.
Tento CSR súbor môžeme poskytnúť CA na spracovanie. CA použije tento CSR súbor a vydá nám certifikát. Pomocou tohto CSR súboru však môžeme vytvoriť aj sebou podpísaný certifikát.
Ak chceme vytvoriť sebou podpísaný certifikát, spustíme nasledujúci príkaz v príkazovom riadku:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Po zadaní príkazu bude potrebné zadať vstupnú frázu. Po zadaní správnej vstupnej frázy sa vygeneruje certifikát, ktorý sa uloží do súboru
server.crt
.
![]() |
Ak má byť zabezpečený server verejne dostupný, budete potrebovať certifikát podpísaný CA. Neodporúčame použiť sebou podpísaný certifikát. |
---|---|
Súbor s kľúčom server.key
a súbor s certifikátom
server.crt
(alebo iným dodaným od CA) nainštalujeme spustením nasledujúcich príkazov v príkazovom riadku:
sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private
Teraz môžeme nakonfigurovať aplikácie, ktoré sú schopné šifrovať na báze dvojice kľúčov, aby použili súbory s certifikátom a kľúčom. Napríklad Apache môže poskytnúť HTTPS, Dovecot môže poskytnúť IMAPS a POP3S, atď.
Ak služby v našej sieti vyžadujú viac ako sebou podpísané certifikáty, môže byť užitočné nastaviť svoju vlastnú súkromnú Certifikačnú Autoritu (CA). Použitím certifikátu podpísaného vlastnou CA, umožníte rôznym službám použiť certifikáty, ktoré umožnia službám navzájom si dôverovať, lebo budú používať certifikáty od rovnakej CA.
Najskôr vytvoríme priečinky, ktoré budú obsahovať potrebné súbory:
sudo mkdir /etc/ssl/CA
sudo mkdir /etc/ssl/newcerts
CA vyžaduje pre svoju funkciu niekoľko ďalších súborov. Prvý bude sledovať posledné sériové číslo použité CA - každý certifikát musí mať jedinečné sériové číslo. Druhý súbor, ktorý bude zaznamenávať, aké certifikáty boli vydané:
sudo sh -c "echo '01' > /etc/ssl/CA/serial"
sudo touch /etc/ssl/CA/index.txt
Tretí súbor je konfiguračný súbor CA. Hoci nie je povinný, je veľmi užitočný pri vydávaní viacerých certifikátov. Otovoríme súbor /etc/ssl/openssl.cnf
a v
[ CA_default ] zmeníme:
dir = /etc/ssl/ # Where everything is kept
database = $dir/CA/index.txt # database index file.
certificate = $dir/certs/cacert.pem # The CA certificate
serial = $dir/CA/serial # The current serial number
private_key = $dir/private/cakey.pem# The private key
Ďalej vytvoríme sebou podpísaný certifikát:
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Po spustení zadáme informácie pre certifikát.
Teraz nainštalujeme koreňový certifikát a kľúč:
sudo mv cakey.pem /etc/ssl/private/
sudo mv cacert.pem /etc/ssl/certs/
Odteraz môžeme začať podpisovať certifikáty. Prvá potrebná položka je CSR (pozrite Generovanie požiadavky na podpísanie certifikátu - Certificate Signing Request (CSR) ). Ak máme CSR, zadáme nasledujúci príkaz, ktorý vygeneruje certifikát podpísaný našou CA:
sudo openssl ca -in server.csr -config /etc/ssl/openssl.cnf
Po zadaní hesla pre kľúč CA bude potrebné podpísať certifikát a potom znova, aby sme potvrdili nový certifikát. Potom by sme mali vidieť množstvo výstupov, ktoré súvisia s vytváraním certifikátu.
Mali by sme získať nový súbor /etc/ssl/newcerts/01.pem
obsahujúci rovnaký výstup.
Skopírujeme všetky riadky medzi textami -----BEGIN CERTIFICATE----- a
----END CERTIFICATE----- a prilepíme ich do súboru s názvom mena servera, na ktorom bude certifikát nainštalovaný. Napríklad mail.nieco.sk.crt
je pekné veľavravné meno.
Ďalšie certifikáty budú pomenované 02.pem
, 03.pem
, atď.
![]() |
Meno súboru mail.nieco.sk.crt nahraďte vlastným názvom. |
---|---|
Nakoniec skopírujeme nový certifikát na počítač, na ktorom ho potrebujeme použiť.
Predvolené umiestnenie pre inštaláciu certifikátov je /etc/ssl/certs
. Týmto umožníme viacerým službám
použiť rovnaký certifikát bez potreby komplikovaného nastavovania oprávnení.
Kvôli aplikáciám, ktoré chceme nakonfigurovať tak, aby používali certifikát podpísaný našou CA, by sme mali ešte skopírovať súbor
/etc/ssl/certs/cacert.pem
do priečinka /etc/ssl/certs/
na každom počítači.
Detailnejšie inštrukcie o kryptografii sa nachádzajú na stránke SSL Certificates HOWTO webu tlpd.org
Stránka The PKI Page obsahuje zoznam Certifikačných autorít.
Na stránke Wikipédie HTTPS sa nachádzajú informácie o HTTPS.
Viac informácií o OpenSSL sa nachádza na stránke OpenSSL Home Page.
Vhodnou príručkou je tiež O'Reillyho Network Security with OpenSSL.