Darmowy certyfikat SSL od Let’s Encrypt

Certyfikaty SSL używane są na serwerach www zapewniają bezpieczeństwo użytkownikom korzystającym ze strony czy aplikacji in webowej, szyfrując połączenie sieciowe pomiędzy serwerem a klientem. Certyfikaty wydawane przez zaufane urzędy certyfikacji nie są jednak tanie, a w przypadku prowadzenia hobbystycznego bloga (chociażby takiego jak ten), niespecjalnie jest się skłonnym do wydawania kolejnych złotówek na takie bajery. Jest jednak pewien sposób, który pozwala wygenerować zaufany certyfikat dla domeny zupełnie za darmo! Mowa o Let’s Encrypt, urzędzie certyfikacji dostępnym publicznie od kwietnia 2016 roku. Projekt ten dostarcza użytkownikom darmowych i łatwych w użyciu certyfikatów TLS.

W tym artykule opisałem proces konfiguracji certyfikatu TLS/SSL od Let’s Encrypt dla serwera www Apache, działającego w systemie Debian 8.

Wymagania wstępne

Jak wspominałem, artykuł dotyczy instalacji certyfikatu na działającym serwerze Apache. Nie będę więc opisywał instalacji samego serwera www. Jeśli nie masz serwera z Apache’m i podpiętej pod niego domeny, ten tutorial nie jest dla Ciebie (przynajmniej nie na chwilę obecną 😕).

Jeśli spełniłeś wymagania o których mowa powyżej, zaloguj się do serwera kontem z dostępem do SUDO i zaczynajmy!

1. Instalacja kienta Certbot

Certyfikaty Let’s encrypt generowane są za pomocą programu klienckiego certbot, którego odpala się na serwerze. Klient ten pozwala automatycznie wygenerować i zainstalować właściwy dla domeny certyfikat SSL.

Żeby zainstalować certbot’a na serwerze, musimy dodać repozytorium do listy źródeł menadżera pakietów APT. Do tego posłuży nam komenda:

echo ‘deb http://ftp.debian.org/debian jessie-backports main’ | sudo tee -a /etc/apt/sources.list

Po dodaniu nowego repo do listy, musimy zaktualizować informacje o dostępnych dla APT’a pakietach. Informacje o dostępnych paczkach zaciągniemy poprzez wklepanie w terminalu komendy:

sudo apt-get update

Okej, czas zainstalować paczkę python-certbot-apache w naszym systemie:

sudo apt-get install python-certbot-apache

Po zakończeniu instalacji, klient certbot powinien być gotowy do użycia.

2. Konfiguracja Apache’a

W tym kroku dopieścimy konfigurację serwera www Apache tak, aby certbot mógł sam odczytać informacje o domenach które chcemy chronić, z plików konfiguracyjnych Apache’a. Otwórzmy więc domyślny plik z konfiguracją wirtualnego hosta Apache, w którym ustawimy naszą domenę:

sudo nano /etc/apache2/sites-available/000-default.conf

W środku pliku, w bloku Virtual Host, znajdź i odkomentuj (usuń znak  # z początku linii) zawierającej dyrektywę ServerName i ustaw jej wartość na nazwę swojej domeny:

----- wycinek -----
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request’s Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName stevko.pl
----- wycinek -----

Po skończeniu edycji, zamknij plik klikając CTRL + X na klawiaturze, wciśnij Y aby zapisać wprowadzone zmiany i zatwierdź klawiszem Enter.

Warto też sprawdzić poprawność nowej konfiguracji za pomocą komendy:

sudo apache2ctl configtest

3. Ustawienie reguł firewalla

Jeśli twój Apache hostuje już jakąś witrynę, najprawdopodobniej konfigurowałeś już firewalla tak, aby zabezpieczyć swój serwer. Trzeba jednak pamiętać, że niechroniona wersja HTTP domyślnie działa na porcie 80, natomiast chroniona SSL’em wersja protokołu HTTP – czyli HTTPS – domyślnie korzysta z portu 443. Dlatego konieczne może być dodanie reguł w zaporze sieciowej, które zezwolą na połączenia przychodzące na ten port.

Jeśli korzystasz z UFW, aktualny stan konfiguracji firewalla możesz sprawdzić poleceniem:

sudo ufw status

Aby zezwolić na ruch przychodzący na domyślnych portach HTTP i HTTPS (porty 80 i 443), wystarczy zezwolić na ruch profilu “WWW Full“:

sudo ufw allow ‘WWW Full’

4. Instalacja certyfikatu SSL

Jak pisałem już wcześniej, do instalacji certyfikatów użyjemy narzędzia certbot, które automatycznie wygeneruje certyfikaty dla domen ustawionych w plikach konfiguracyjnych naszego Apache’a. Aby uruchomić interaktywnego kreatora instalacji i wygenerować certyfikat, wklepujemy w terminalu coś takiego:

sudo certbot --apache

Ta komenda uruchamia kreatora konfiguracji, który poprosi nas o wybranie domeny, dla której chcemy wygenerować certyfikat, podanie adresu e-mail, zaakceptowanie warunków licencji. W ostatnim kroku, kreator pyta czy witryna powinna być dostępna zarówno po HTTP jak i HTTPS, czy tylko w bezpiecznym wariancie HTTPS.

Jeśli wszystko zrobiłeś poprawnie, twoja strona www powinna być teraz chroniona certyfikatem SSL.

Pliki wygenerowanych certyfikatów znajdziesz w katalogu Note that you can find the generated certificate files in /etc/letsencrypt/live na serwerze. Dodatnowo, stan swojego certyfikatu możesz sprawdzyć odwiedzając poniższy link (“stevko.pl” zamień na nazwę swojej domeny):

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

5. Odnawianie certyfikatu

Certyfikaty Let’s Encrypt są ważne przez okres 90 dni od daty wygenerowania – po tym czasie, certyfikat wygaśnie. Zaleca się, aby certyfikat odnawiać co 60 dni. Narzędzie certbot, którego użyliśmy do wygenerowania certyfikatów ma jedną fajną funkcję – parametr, który automatycznie pozwoli odnowić certyfikaty, które wygasają za mniej niż 30 dni.

Proces odnawiania certyfikatów dla wszystkich skonfigurowanych domen, można uruchomić komendą:

sudo certbot renew

Znając życie, nie będzie nam się chciało odnawiać certyfikatów, klepiąc komendę ręcznie kilka razy w roku, prawda? Bez obaw! Możemy przecież ustawić zadanie w cron, które będzie to robić za nas. Odpalmy więc edycję cron’a:

sudo crontab -e

Wybierz opcję 1, aby otworzyć cron’a w edytorze tekstowym nano, a następnie dodaj na końcu pliku taki wiersz:

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

Po skończeniu edycji, zamknij plik klikając CTRL + X na klawiaturze, wciśnij Y aby zapisać wprowadzone zmiany i zatwierdź klawiszem Enter.

Właśnie stworzyliśmy nowe zadanie cron’a, które automatycznie spróbuje odnowić certyfikaty za pomocą certbot’a, w każdy poniedziałek o godzinie 3:45.

Leave a Reply

%d bloggers like this: