Darmowy certyfikat SSL od Let’s Encrypt

Jak wygenerować własny, darmowy zaufany certyfikat SSL dla swojej strony i przypisać go do serwera www Apache działającego na Linuxie.

Certyfikaty SSL używane na serwerach www zapewniają bezpieczeństwo użytkownikom korzystającym ze strony czy aplikacji 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 opisany został proces konfiguracji certyfikatu TLS/SSL od Let’s Encrypt dla serwera www Apache, działającego w systemie Debian 8.

Wymagania wstępne

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:

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:

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

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ę:

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:

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:

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:

Aby zezwolić na ruch przychodzący na domyślnych portach HTTP i HTTPS (porty 80 i 443), wystarczy zezwolić na ruch profilu “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:

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 /etc/letsencrypt/live na serwerze. Dodatkowo, stan swojego certyfikatu możesz sprawdzić 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ą:

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:

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

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.