niedziela, 30 listopada 2014

Apache + SSL krok po kroku

Transmisja danych w internecie nie jest domyślnie szyfrowana, co oznacza, że za pomocą bardzo prostych narzędzi można odczytać większość informacji przepływających przez ocean sieci. Posiadając minimalną wiedzę na temat protokołów sieciowych oraz podstaw transmisji danych można dowiedzieć się na przykład kto wysyła lub otrzymuje jakie informacje, pod warunkiem, że informacje te właśnie nie są zabezpieczone. Nie rzadko więc zachodzi potrzeba zabezpieczenia transmitowanych informacji, szczególnie gdy dotyczą one wrażliwych danych osobowych, haseł, numerów kont czy numerów kart płatniczych bądź kart kredytowych. Przeważnie tylko tego typu informacje są szyfrowane, ponieważ sam proces szyfrowania zużywa dodatkowe zasoby.

W niniejszym artykule ustanowienie bezpiecznej transmisji danych pomiędzy przeglądarką www, a serwerem. Do zabezpieczenia informacji transmitowanych pomiędzy przeglądarką internetową a serwerem www służą protokoły SSL (Secure Socket Layer) oraz HTTPS (Hypertext Transfer Protocol Secure), który stanowi szyfrowaną (za pomocą SSL) odmianę protokołu HTTP. Omówimy najprostszy sposób uruchomienia bezpiecznego połączenia wykorzystującego protokoły SSL + HTTPS na serwerem Apache działającym w środowisku Linux.
Do ustanowienia zabezpieczonego połączenia HTTPS wykorzystuje się protokół SSL, który jest najczęściej kojarzony właśnie z protokołem HTTP, ale może służyć do zabezpieczania także innych protokołów, np. SMTP lub IMAP. Ale jak się ma SSL do HTTPS? SSL działa w warstwie prezentacji, więc może służyć do zabezpieczania protokołów działających w warstwie aplikacji, która znajduje się wyżej, takich jak protokół HTTP.
Do ustanowienia prawidłowego i w pełni funkcjonalnego połączenia SSL pomiędzy serwerem www, a przeglądarką internetową konieczny jest podpisany certyfikat SSL. Certyfikaty SSL umożliwiają weryfikację serwera, dla którego domeny zostały wystawione. Osoby odwiedzające witrynę www, odczytując informacje zawarte w certyfikacie SSL, mogą dowiedzieć się, przykładowo, kto jest właścicielem certyfikowanej domeny lub kto wystawił dany certyfikat. Ponieważ jednak wystawienie certyfikatu SSL nie jest zadaniem niezmiernie trudnym i może ono zostać wykonane przez każdego, zostały utworzone specjalne zaufane Urzędy Certyfikacji, weryfikujące dane podmiotów ubiegających się o certyfikat SSL. W przypadku próby ustanowienia połączenia SSL z serwerem, którego certyfikat nie został podpisany przez zaufany Urząd Certyfikacji, w przeglądarce internetowej pojawia się bardzo wyraźne ostrzeżenie dotyczące tego faktu, aby ostrzec internautów przez potencjalnymi zagrożeniami. Zaufane Urzędy certyfikacji, czyli w praktyce podmioty świadczące usługi certyfikacyjne, oferują różnego rodzaju certyfikaty SSL. Ich możliwości i ceny są bardzo zróżnicowane, w zależności od przeznaczenia certyfikatu.
Ponieważ osobom nieoswojonym z tematem procedura ustanowienia połączenia zabezpieczonego protokołem SSL (HTTPS), może wydawać się skomplikowana, choć w rzeczywistości tak nie jest, podzielimy ją tutaj na poszczególne kroki aby ułatwić zrozumienie.

KROK I - CSR (Certificate Signing Request)

Aby wystąpić do podmiotu świadczącego usługi certyfikacyjne o wydanie wybranego certyfikatu SSL należy utworzyć plik zawierający wniosek o podpisanie certyfikatu (CSR – Certificate Signing Request). W celu utworzenia pliku CSR można skorzystać z narzędzi z pakietu OpenSSL. Opiszemy tutaj jak utworzyć plik CSR korzystając z pakietu OpenSSL z wiersza poleceń systemu operacyjnego Linux.
Aby rozpocząć procedurę tworzenia pliku CSR należy się upewnić, że pakiet OpenSSL jest prawidłowo zainstalowany. Przykładowo w systemach Linux z dystrybucji Red Had Linux, Fedora, Scientific Linux bądź CentOS, można to w prosty sposób sprawdzić przy pomocy narzędzia yum:

[root@server_1 ~]# yum info intalled openssl

W przypadku odnalezienia przez narzędzie yum zainstalowanego pakietu OpenSSL, po zatwierdzeniu powyższego polecenia, wyświetlane są informacje o zainstalowanym pakiecie. Przykładowo:

Name : openssl
Arch : i686
Version : 0.9.8n
Release : 2.fc11
Size : 1.4 M
Repo : updates
Summary : A general purpose cryptography library with TLS implementation
URL : http://www.openssl.org/
License : OpenSSL
Description : The OpenSSL toolkit provides support for secure communications
W przypadku nie odnalezienia zainstalowanego pakietu OpenSSL, przed kontynuowaniem należy takowy zainstalować. Przykładowo w systemach z dystrybucji Red Had Linux, Fedora, Scientific Linux bądź CentOS można to zrobić wprowadzając w wierszu poleceń następujące polecenie:

[root@server_1 ~]# yum install openssl

Zakładając, że pakiet openssl jest prawidłowo zainstalowany, w celu utworzenia pliku CSR należy z wiersza poleceń wydać następujące polecenie (nazwę domeny w poleceniu można zastąpić nazwą własnej domeny, dla której ma zostać podpisany certyfikat SSL, ale nie jest to absolutnie konieczne):

[root@server_1 ~]# openssl req -nodes -newkey rsa:2048 -keyout nazwa_domeny.key -out nazwa_domeny.csr

Po zatwierdzeniu powyższego polecenia zostaje uruchomiona interaktywna aplikacja, która generuje plik CSR, po udzieleniu przez użytkownika odpowiedzi na wyświetlane pytania.

Generating a 2048 bit RSA private key
....................+++
.............+++
writing new private key to nazwa_domeny.key
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter . the field will be left blank.
-----
Country Name (2 letter code) [GB]:PL
State or Province Name (full name) [Berkshire]:Mazowieckie
Locality Name (eg, city) [Newbury]:Warszawa
Organization Name (eg, company) [My Company Ltd]:Moja firma
Organizational Unit Name (eg, section) []:Centrala
Common Name (eg, your name or your servers hostname) []:www.nazwadomeny.pl
Email Address []: przykladowyadres@przyklad.pl

Uwaga! Common Name odnosi się do domeny, dla której ma zostać wystawiony certyfikat!
Na samym końcu pojawiają się pytania dotyczące opcjonalnych cech certyfikatu, takich jak hasło zabezpieczające certyfikat. Na pytanie dotyczące opcjonalnego hasła do certyfikatu należy koniecznie odpowiedzieć wciskając sam klawisz ENTER, bez wprowadzania jakichkolwiek znaków (nawet samym spacji).

Po wprowadzeniu przez użytkownika niezbędnych informacji zostają utworzone 2 pliki w katalogu, w którym została wywołana aplikacja do generowania pliku CSR.
Utworzone pliki to

nazwa_domeny.csr
nazwa_domeny.key

Pierwszy z pików, nazwa_domeny.csr, należy dostarczyć do podmiotu, który wystawia i podpisuje certyfikat SSL. Podmiot świadczący usługi certyfikacyjne wystawia i podpisuje certyfikat SSL właśnie na podstawie otrzymanego pliku CSR.
Drugi z plików, nazwa_domeny.key, będzie potrzebny do prawidłowego funkcjonowania otrzymanego certyfikatu SSL. Plik ten zawiera bowiem prywatny klucz certyfikatu, który jest niezbędny do uruchomienia podpisanego certyfikatu SSL.

Przed przejściem do instalacji na serwerze certyfikatu SSL, koniecznie należy wkleić do otrzymanego certyfikatu SSL informacje o ścieżce certyfikacyjnej do podpisanego certyfikatu SSL i zachować edytowany w ten sposób plik zawierający certyfikat SSL oraz wklejone informacje o ścieżce certyfikacyjnej. Informację o tym, jak należy to zrobić można zawsze uzyskać od podmiotu podpisującego certyfikat SSL. Generalnie procedura jest bardzo prosta i polega na połączeniu, w odpowiedni sposób, zawartości 2 plików. Plik zawierający ścieżkę certyfikacyjną otrzymujemy od wystawcy certyfikatu SSL.

KROK II – Proste operacje na plikach

Przed rozpoczęciem procedury instalacji certyfikatu, która polega na umieszczeniu plików zawierających certyfikat SSL oraz prywatny klucz certyfikatu w odpowiednich katalogach, jak również na lekkim dopasowaniu plików konfiguracyjnych Apache do nowych okoliczności, należy się upewnić, czy obecna instalacja serwera Apache jest odpowiednio skonfigurowana do obsługi protokołu SSL.
Serwer Apache może zostać skonfigurowany do obsługi protokołu SSL na kilka sposobów. Omówimy tutaj wyłącznie instalację oprogramowania obsługującego protokół SSL w postaci modułu serwera Apache, za pomocą narzędzia yum.
Aby sprawdzić, czy moduł jest już zainstalowany należy postępować jak poniżej.

[root@server_1 ~]# yum info installed mod_ssl

W przypadku odnalezienia zainstalowanego pakietu, pojawia się informacja podobna do:

Installed Packages
Name : mod_ssl
Arch : x86_64
Epoch : 1
Version : 2.2.3
Release : 76.el5.centos
Size : 183 k
Repo : installed
Summary : SSL/TLS module for the Apache HTTP server
URL : http://httpd.apache.org/
License : Apache Software License
Description : The mod_ssl module provides strong cryptography for the Apache Web
: server via the Secure Sockets Layer (SSL) and Transport Layer
: Security (TLS) protocols.

Jeżeli pakiet nie jest zainstalowany, należy go zainstalować poprzez wydanie polecenia:

[root@server_1 ~]# yum install mod_ssl

Następny krok polega na umieszczeniu w odpowiednich katalogach otrzymanego pliku, zawierającego podpisany certyfikat SSL, oraz pliku zawierającego klucz prywatny.

Plik zawierający podpisany certyfikat SSL należy umieścić w katalogu
/etc/pki/tls/certs/
, więc ścieżka do pliku powinna wyglądać następująco:

/etc/pki/tls/certs/nazwa_domeny.crt

Plik z kluczem prywatnym, utworzony w chwili wygenerowania pliku CSR należy umieścić w katalogu
/etc/pki/tls/private/
, a ścieżka do niego ma wyglądać tak:

/etc/pki/tls/private/nazwa_domeny.key

Uprawnienia do pliku z podpisanym certyfikatem SSL mogą być ustawione następująco:

-rw-r--r-- 1 root root 1688 Apr 17 14:34 nazwa_domeny.crt

Uprawnienia do pliku z kluczem prywatnym powinny być nieco bardziej restrykcyjne:

-rw------- 1 root root 1679 Apr 17 11:26 nazwa_domeny.key

KROK III – Dopasowanie konfiguracji oraz ponownie uruchomienie serwera Apache

Należy teraz edytować zawartość pliku konfiguracyjnego serwera Apache, dotyczącego ustawień SSL. Plik, którego zawartość wymaga dopasowania to

/etc/httpd/conf.d/ssl.conf

W pliku ssl.conf należy znaleźć wiersz zawierający określenie 'SSLCertificateFile', który odzwierciedla ścieżkę do pliku zawierającego podpisany certyfikat SSL + informacje o łańcuchu certyfikacyjnym. Zawartość całego wiersza powinna zostać edytowana do następującej postaci:

SSLCertificateFile /etc/pki/tls/certs/nazwa_domeny.crt

Kolejną czynnością jest znalezienie w pliku ssl.conf wiersza zawierającego określenie
'SSLCertificateKeyFile'
, odnoszące się do pliku zawierającego prywatny klucz certyfikatu SSL. Wiersz powinien zostać edytowany do postaci:

SSLCertificateKeyFile /etc/pki/tls/private/nazwa_domeny.key

Po zapisaniu zmian należy ponownie uruchomić Serwer Apache:

[root@server_1 ~]# service httpd restart

To wszystko. Połączenie SSL powinno teraz prawidłowo działać. Można to w prosty sposób sprawdzić, wpisując w pasku adresów przeglądarki www adres zabezpieczonego połączenia z witryną www, dla której został wydany i zainstalowany certyfikat SSL.

Mam nadzieję, że o niczym niezbędnym dla ustanowienia bezpiecznego połączenia SSL nie zapomniałem, choć wiele przydatnych ustawień zostało przeze mnie celowo pominiętych, takich jak np. wirtualne hosty Apache, bądź zmiany ustawień firewalla.

Brak komentarzy:

Prześlij komentarz