Jak wdrożyć automatycznie odnawiane, darmowe certyfikaty SSL od Let’s Encrypt

dodał 16 grudnia 2016 o 08:03 w kategorii HowTo  z tagami:
Jak wdrożyć automatycznie odnawiane, darmowe certyfikaty SSL od Let’s Encrypt

Kiedyś certyfikaty SSL dla stron WWW były trudne we wdrożeniu i kosztowne, przez co niewiele serwisów ich używało. Dzisiaj większość wymówek już zniknęła – pokażemy Wam jak można mieć swój certyfikat za darmo i bez problemu.

We współpracy z firmą ArubaCloud pokazaliśmy Wam, jak postawić swój serwer backupów, jak skonfigurować własny serwer VPN i podłączyć do niego komputer, telefony komórkowe oraz domowy ruter a także jak schować się przed cenzurą sieci i jak zacząć serwer zabezpieczać oraz jak postawić swój własny zdalny pulpit. Dwa tygodnie temu postawiliśmy wspólnie serwer WWW który dzisiaj wyposażymy w certyfikat SSL od organizacji Let’s Encrypt.

Jeszcze rok temu za certyfikat SSL w większości przypadków trzeba było zapłacić. Nie były to ceny zaporowe, jednak dla wielu internautów przekraczały budżet, który chcieli przeznaczyć na swój serwis WWW. Na szczęście do życia została powołana organizacja Let’s Encrypt, sponsorowana przez EFF, Akamai, Cisco i Mozillę, która nie tylko bardzo uprościła proces zdobywania certyfikatu, ale także robi to całkowicie gratis w imię podniesienia bezpieczeństwa sieci. ZaufanaTrzeciaStrona już od półtora roku dostępna jest wyłącznie po HTTPS, zatem czas także i na Wasze strony.

Konfiguracja serwera

Jeśli nie macie jeszcze swojego własnego serwera, to jest to dobra okazja by się w taki wyposażyć. Aruba oferuje dwa miesiące korzystania ze swojego podstawowego serwera gratis– a po zakończeniu promocji będzie on Was kosztował zaledwie 4 złote miesięcznie. Instrukcję jak krok po kroku skorzystać z promocji i uruchomić swój serwer znajdziecie w tym artykule. Jeśli macie już swój serwer – to zapraszamy do lektury kolejnych akapitów.

W opisywanym przykładzie będziemy instalować certyfikat SSL dla domeny test.z3s.pl. Rozpoczynamy od instalacji modułu mod_ssl do Apache, który umożliwi obsługę SSL:

sudo yum install mod_ssl

Następnie tworzymy plik /etc/httpd/conf.d/ssl_test_z3s.conf, a jego zawartość powinna wyglądać w następujący sposób:

<VirtualHost *:80>
    ServerName test.z3s.pl
    ServerAlias www.test.z3s.pl
    DocumentRoot /var/www/html
    ErrorLog /var/log/httpd/test.z3s.pl/error.log
</VirtualHost>

W dyrektywie ErrorLog podaliśmy ścieżkę do pliku /var/log/httpd/test.z3s.pl/error.log – w tym pliku będą zapisywane wszelkie informacje o błędach. Aby plik został utworzony podczas startu usługi httpd, musimy stworzyć katalog /var/log/httpd/test.z3s.pl/:

sudo mkdir /var/log/httpd/test.z3s.pl/

Po dokonaniu zmian restartujemy usługę httpd.

sudo service httpd restart

Certyfikat SSL

W celu pobrania i zainstalowania certyfikatu z LetsEncrypt.org, wspomożemy się oprogramowaniem certbot. W repozytorium EPEL dostępny jest pakiet python2-certbot-apache. Aby go zainstalować wydajemy polecenie:

sudo yum install python2-certbot-apache

Pakiet python2-certbot-apache zawiera program certbot , który umożliwi nam automatyczne pobranie klucza z LetsEncrypt.org. Z pomocą tego programu będziemy cyklicznie odświeżać nasz certyfikat.

Aby uzyskać certyfikat SSL należy uruchomić polecenie certbot:

sudo certbot

Po wykonaniu powyższej komendy zostaniemy poproszeni o wskazanie domen dla których chcemy włączyć obsługę SSL.

domeny_ssl

Następnie musimy podać nasz adres e-mail na który będziemy otrzymywać ważne informacje lub który będzie mógł być użyty w celu odzyskania naszego klucza.

email_certbot

Po podaniu naszego adresu e-mail następuje weryfikacja oraz utworzenie klucza o długości 2048 bitów. W razie problemów wszelkie zdarzenia zapisywane są w pliku /var/log/letsencrypt/letsencrypt.log

weryfikacja_ssl

W kolejnym kroku zostaniemy zapytani o konfigurację protokołów HTTP/HTTPS. Do wyboru mamy dwie opcje: Easy oraz Secure.

konfiguracja_ssl

Jeśli użyjemy opcji Easy to nasza strona będzie dostępna zarówno na porcie 80 oraz 443. Użytkownicy będą mogli korzystać zarówno z niezaszyfrowanego jak i zaszyfrowanego protokołu. Jeśli wybierzemy wariant Secure, użytkownicy wysyłający żądania na port 80 uzyskają odpowiedź, że zasób dostępny jest na porcie 443 – nasza strona będzie dostępna tylko i wyłącznie po HTTPS. W opisywanym przykładzie skorzystamy z opcji Secure.

Sprawdzamy nasz certyfikat

W Internecie dostępne są darmowe narzędzia które sprawdzą czy dobrze skonfigurowaliśmy nasza usługę HTTPS oraz certyfikat SSL. Jednym z nich jest strona ssllabs.com.

https://www.ssllabs.com/ssltest/analyze.html?d=test.z3s.pl&latest

 ssllabs1

Tylko C?

Po wykonaniu testu nie uzyskaliśmy maksymalnej oceny. Strona ssllabs.com poinformowała nas, że nasz serwer Apache podatny jest na ataki typu POODLE.

Edytujemy plik /etc/httpd/conf.d/ssl.conf oraz w linii 75 zamieniamy

SSLProtocol All -SSLv2

na

SSLProtocol All -SSLv2 -SSLv3

Restartujemy usługę httpd i wykonujemy ponowny test na stronie https://www.ssllabs.com wybierając opcję „Clear Cache”.

ssllabs2

Od razu lepiej.

Automatyczne pobieranie certyfikatu

Certyfikaty LetsEncrypt.org ważne są tylko 90 dni. Polityka ta ma między innymi wymuszenie na użytkownikach zautomatyzowania procesu odnawiania certyfikatu, dzięki czemu unikną oni jego wygaśnięcia. Za pomocą zainstalowanego już narzędzia certbot możemy zautomatyzować odświeżanie naszego klucza. Aby wywołać proces odnowy dla wszystkich zainstalowanych certyfikatów należy uruchomić polecenie:

sudo certbot renew

Możemy zautomatyzować proces odświeżania naszego certyfikatu dodając powyższe polecenie do crontaba:

sudo crontab -e

Wpisujemy:

45 1 * * 1 /usr/bin/certbot renew >> /var/log/certbot.log

Powyższy wpis spowoduje, że polecenie /usr/bin/certbot renew będzie uruchamiane co tydzień o godzinie 1:45 nad ranem. Wynik działania polecenia zostanie zapisany do pliku /var/log/certbot.log. Dzięki temu dopóki działa Let’s Encrypt, dopóty nasz serwis będzie mógł cieszyć się zieloną kłódką.

Jeśli nawet uważacie, że Wasza strona nie potrzebuje protokołu HTTPS, ponieważ nie przesyła żadnych istotnych danych, to nie wnikając już w inne argumenty natury technicznej przypomnimy, że Google premiuje w swoim rankingu wyszukiwarki witryny posługujące się szyfrowanymi połączeniami.

Dla pełnej przejrzystości – za przygotowanie oraz opublikowanie powyższego artykułu otrzymujemy wynagrodzenie.