16.12.2016 | 08:03

krystian

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.

Powrót

Komentarze

  • 2016.12.16 08:26 Arek

    „Google premiuje w swoim rankingu wyszukiwarki witryny posługujące się szyfrowanymi połączeniami” – źródło (a najlepiej potwierdzenie w praktyce)?

    Odpowiedz
      • 2016.12.16 12:19 MM

        Precyzyjniej – jeżeli wszystkie inne elementy rankingowe będą równe, strona szyfrowana wskoczy wyżej. Pewnie niedługo się to zmieni. Podpowiada mi choćby wyświetlanie „Not Secure” w Chrome 56 od stycznia 2017. Już teraz w becie jest informacja w konsoli developerskiej, jeżeli na niezabezpieczonej stronie jest pole na hasło lub numer karty, i znaczek „Secure” obok kłódki, jak w certach EV.

        Odpowiedz
  • 2016.12.16 10:40 marcin Odpowiedz
    • 2016.12.26 11:42 JA

      Pier..lenie. Tu chodzi o zwykly szmalec, poniewaz wiekszosc firm wydajacych certyfikaty nalezy do zachodnich kororacji. Wiec beda wspierac sie wzajemnie i udowadnaic, jaki to HTTPS jest konieczny do porwadzenia bloga. Belkot dla idiotow, jak i chmury, ktorych jedynym celem bylo i jest wyludzenie prywatnych danych. Nikt zorientowany w temacie nie traktuje tych idiotyzmow powaznie.

      Odpowiedz
  • 2016.12.16 11:39 Artur

    Czy ten certyfikat jest zaufany? czy gdy będę otwierać stronę z tym certyfikatem dostanę informację że certyfikat jest niezaufany?

    Odpowiedz
    • 2016.12.16 11:40 Adam

      Zajrzyj na https://test.z3s.pl

      Odpowiedz
      • 2016.12.16 19:46 Xxxxx

        Czemu tylko A a nie A+ ??

        Odpowiedz
        • 2016.12.17 16:26 robo

          A komu by się chciało HSTS ustawiać ;)

          Odpowiedz
          • 2016.12.18 14:19 Borys

            Idą Twoim tokiem myślenia, poco robić update systemu i aplikacji skoro wszytko działa :)

  • 2016.12.16 11:44 Kasztan

    Przydatne i przyzwoicie wytlumaczone, nawet dla takiego smiecia jak ja.

    Odpowiedz
  • 2016.12.16 12:35 test

    A czemu ocena w ssllabs tylko A? poradnik powinien wytłumaczyć jak dojść wyżej w ocenie

    Odpowiedz
  • 2016.12.16 15:19 Justin Case

    Jak na portal traktujacy o bezpieczenstwie to polecalbym w zaleznosci od posiadanej kombinacji Apache/Nginx+OpenSSL wlozyc troche wiecej wysilku w bezpieczenstwo:

    https://mozilla.github.io/server-side-tls/ssl-config-generator/

    No i po co certbot ma sie uruchamiac co tydzien skoro sam cert jest wazny przez 3mce?

    Odpowiedz
    • 2018.03.02 13:51 Michał Leszczyński

      Nie będzie się odnawiało co tydzień. Po prostu co tydzień wywoła letsencrypta, jeżeli ten uzna że będzie za wcześnie na wymianę certyfikatu to nie wykona żadnej operacji. Tak jest znacznie lepiej – jeżeli ustawimy żeby odpalało się dokładnie co 90 dni i akurat przy próbie wystawienia certyfikatu ich serwer padnie na kilka sekund to już nie będzie czasu na ponowienie próby.

      Odpowiedz
  • 2016.12.16 16:58 Marek

    Dzięki, przydatny artykuł.
    Po co został użyty python? W czym ta pythonowa biblioteka jest lepsza od „czystego” certbota?

    Odpowiedz
  • 2016.12.16 20:06 Pluto

    Jeśli chodzi o stosowanie ssla to jestem za. Majac na uwadze pozycję w Google warto się pokusić o Nginxa i HTTP2, wtedy to idzie ładnie w parze z https’em.
    Słyszałem, że Google też premiuje za certyfikaty, które mają dłuższe okresy życia, np. lepiej kupić taki raz na 3 lata niż trzy razy co roku. Ktoś się orientuje ile w tym jest prawdy?
    Pozdrawiam

    Odpowiedz
  • 2016.12.17 12:21 Nala_Alan

    Jak chodzi o ranking z ssllabs, to lepiej sprawdza się darmowy certyfikat z Cloudflare (notabene ten sam który używa z3s na stronie), bo ma A+, nie A jak Let’s Encrypt.

    Odpowiedz
    • 2016.12.18 12:13 robo

      Hmmm, a na moim Let’s Encrypt wyciska A+
      Może to przez więcej ramu albo co ;)

      Odpowiedz
    • 2016.12.18 13:43 Marek

      Tak, tak, a to że połączenie między Cloudflare a naszym serwerem może być nieszyfrowane to już nie ma żadnego znaczenia. To że Cloudflare może przeprowadzać ataki mitm też nie. Wskazania SSL Labs są wyrocznią bezpieczeństwa. Jeżeli Twoim celem są cyferki i pozycja w rankingu to zerknij sobie co pokazuje Calomel – dla test.z3s.pl pokazuje 100% (nie żeby to było istotne, ale może zmieni Twoje nastawienie do Let’s Encrypt).

      Odpowiedz
    • 2016.12.18 18:30 Borys

      Jeśli chodzi o funkcjonalność to lepiej mieć swój certyfikat, a A+ można mieć z Let’s Encrypt bez problemu!.

      Odpowiedz
  • 2016.12.19 14:00 P.

    A czy Cron nie powinien jeszcze reloadować Apache’a, żeby wczytał najnowszy certyfikat?

    Odpowiedz
    • 2016.12.19 17:06 Borys

      CertBot ma plugin do obsługi Apache, nie trzeba ręcznie robić przeładowania konfigu.

      Odpowiedz
      • 2016.12.20 11:28 P.

        Dzięki za info! Tego nie wiedziałem.

        Odpowiedz
  • 2016.12.23 21:20 Kadigan

    Z takich ciekawostek, usiłowałem ostatnio ustalić jakie opcje wprowadzenia obsługi Let’s Encrypt oferuje Nazwa.pl (NetArt). Otóż okazuje się, że skoro NetArt Sp. z o.o. oferuje swoje własne certyfikaty (za całkiem spore pieniążki), to nie poczuwają się do wprowadzenia obsługi Let’s Encrypt teraz ani w najbliższej przyszłości. Coż… Pozostaje generowanie certyfikatów na lokalnej maszynie i co-3-miesięczne wprowadzanie ich przez panel administracyjny… Słabo.

    Odpowiedz
    • 2016.12.24 10:14 Borys

      Wytłumaczysz jak chcesz to technicznie zrobić? bo nie widzę tutaj takiej możliwości :)

      Odpowiedz
    • 2017.02.23 19:28 Ivellios

      Chyba większość firm oferujących jednocześnie shared hosting i certyfikaty stosuje takie utrudnienia – widocznie liczą na to, że klient się rozmyśli i postanowi kupić certyfikat u nich. W Prohost.pl na przykład, jeśli chcesz mieć zainstalowany certyfikat kupiony w innej firmie, to musisz go wysłać razem z kluczem do Biura Obsługi Klienta i wskazać, na jakiej domenie certyfikat ma być zainstalowany. O Let’s Encrypt zapomnij.

      Odpowiedz
    • 2017.03.20 09:49 Dominik

      Wiecie może czy nadal to tak wygląda? Czy mając dostęp SSH w nazwa.pl da się to zautomatyzować?

      Odpowiedz
  • 2017.03.23 00:48 Damian

    „A” to może było kiedyś, teraz pod https://test.z3s.pl/ na https://www.ssllabs.com/ssltest/analyze.html?d=test.z3s.pl jest „T”.

    Valid until Wed, 15 Mar 2017 09:06:00 UTC (expired 7 days, 14 hours ago) EXPIRED

    Odpowiedz
    • 2017.03.30 03:19 Damian

      Zauważyłem, że jeszcze tego samego dnia, ów testowa strona miała już poprawny certyfikat — gratuluję.
      Czy moglibyście napisać, co było przyczyną nie odnowienia się certyfikatu automatycznie?

      Odpowiedz
    • 2018.03.02 15:44 Czytaj uważnie

      Czytaj uważnie: Certyfikaty Lets Encrypt wygasają po 90 dniach. Certyfikaty są per-domena, co oznacza, że certyfikat dla „test.” i „www.” to 2 oddzielne certyfikaty.

      Odpowiedz
  • 2018.03.02 12:44 Pablo

    Może źle myślę i mnie poprawicie, ale:

    1. ktoś już zauważył, gdzie sens odnawiania co tydzień skoro certyfikat ważny na 3 miesiące.

    2. Skoro ustawiamy aby serwer obsługiwał https, to dlaczego w pliku konfiguracyjnym nie ma nasłuchiwania na porcie 443 tylko 80 ?????, czy 80 wystarczy przy https ?????

    Odpowiedz

Zostaw odpowiedź do Damian

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

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

Komentarze