Openssl

Szyfrowanie to proces przekształcania tekstu z postaci jawnej, czytelnej dla człowieka na postać zaszyfrowaną. Jeśli intruz przechwyci niezaszyfrowaną transmisję danych, może łatwo odczytać wszystkie przesyłane w niej informacje. Do przejęcia transmisji może dojść przede wszystkim w tej samej sieci LAN. Do przechwytywania transmisji danych w sieci Ethernet służą narzędzia nazywane snifferami. Najpopularniejsze z nich to tcpdump, tcpflow, wireshark.
Klucz publiczny służy do szyfrowania wiadomości a klucz prywatny do odszyfrowania wiadomości.
Szyfrowane połączenie do serwera WWW

1. klinet łączy się z serwerem
2. serwer odpowiada wraz z certyfikatem (x509)
3. klient weryfikuje ważność certyfikatu dla tej domeny
4. klient generuje klucz symetryczny i szyfruje go asymetrycznie za przy pomocy klucza publicznego serwera (z certyfikatu)
5. klient przesyła klucz symetryczny w postaci zaszyfrowanej do serwera
6. serwer weryfikuje dane i odszyfrowuje klucz
7. od tej pory transmisja odbywa się w sposób szyfrowany

Najpierw instalujemy openssl (open source).

linux# apt-get install openssl

1. Generujemy prywatny klucz hosta.

linux# openssl genrsa -des3 -out privkey.pem 2048

Podczas generowania klucza prywatnego OpenSSL poprosi o podanie hasła. Hasło służy do zaszyfrowania klucza. Kiedy ktoś przejmie klucz będzie musiał najpierw odszyfrować hasło klucza.

2. Posiadając klucz, możemy wygenerować CSR, czyli żądanie certyfikatu:

linux# openssl req -new -key www.domena.pl.key -out www.domena.pl.csr

Podczas generowania żądania certyfikatu OpenSSL poprosi o podanie hasła do klucza domena.pl.key. Nasz klucz zawarty w pliku domena.pl.key zostanie na chwilę odszyfrowany. W rezultacie otrzymamy plik domena.pl.csr, który po podpisaniu przez zaufane centrum certyfikacji stanie się certyfikatem i będzie mógł zostać użyty do szyfrowania transmisji.

Alternatywny sposób wygenerowania prywatnego klucza i żądania certyfikatu.
OpenSSL daje nam możliwość skorzystania z gotowych skryptów CA.pl (perl) lub CA.sh (bash). Musimy wtedy zmienić konfigurację w pliku openssl.conf (/etc/ssl/openssl.cnf), ponieważ domyślnie openssl generuje 1024 bitowy klucz prywatny, a ten może okazać się za słaby dla niektórych wystawców certyfikatów.
Najpierw zlokalizujmy skrypt CA.pl w naszym systemie (najczęściej skrypty znajdują się w katalogu: /usr/lib/ssl/misc/)
locate CA.pl
A następnie odpalmy go z parametrem -newreq (new request), który spowoduje, że wygenerujemy żądanie certyfikatu
CA.pl -newreq
W rezultacie otrzymamy 2 pliku: newkey.pem — klucz prywatny oraz newreq.pem – żądanie.

Niezależnie od wybranej metody generowania CSR, podczas generowania żądania certyfikatu zostaniemy poproszeni o podanie kilku informacji:

Country = PL #kraj
State = Malopolskie #województwo
Localization = Krakow #miasto
Organization = VarLog #nazwa naszej firmy, jednostka organizacyjna
Common Name = www.domena.pl #to CN decyduje dla jakiej domeny będzie wygenerowane żądanie
(podanie www w nazwie domeny, oznacza, że certyfikat będzie ważny zarówno dla www.domena.pl jak i domena.pl)
emailAddress = address@email.pl #adres e-mail służący do kontaktu w sprawie certyfikatu

Po wygenerowaniu CSR sprawdzamy, czy nie ma w nim żadnej pomyłki:

linux# openssl req -in www.domena.pl.csr -text

Żródło:
http://www.openssl.org/docs/HOWTO/keys.txt
http://www.openssl.org/docs/HOWTO/certificates.txt
http://niebezpiecznik.pl/post/generowanie-i-instalacja-certyfikatu-ssl-na-serwerze-www/