W dzisiejszym artykule pokażę Wam, jak w prosty i łatwy sposób wygenerować swój własny darmowy certyfikat SSL dla strony internetowej. Jak wiemy w dzisiejszych czasach niemal wszystkie przeglądarki oznaczają dość jednoznacznie strony internetowe, które nie posiadają certyfikatu SSL.
Dzisiaj jest to trend, który wchodzi na stałe. Wszystkie strony powinny być zabezpieczone bezpiecznym certyfikatem SSL. Niezależnie od tego czy wydaje nam się, że przetwarzamy dane czy nie (cookies to także dane) strona internetowa powinna mieć certyfikat.
Wstęp
Jeszcze jakiś czas temu mieliśmy na rynku zagranicznego gracza StartSSL, który wystawiał każdemu zainteresowanemu bezpłatnie pełnoprawny certyfikat SSL, który można było umieścić na stronie www i korzystać tak jak z drogiego, płatnego certyfikatu.
Niestety czasy StartSSL po kilku wpadkach minęły bezpowrotnie, ale rynek IT nie lubi dziury, więc szybko pojawiła się nowa organizacja, która przejęła schedę. StartSSL miał jeszcze jedną ciekawą funkcję. Można było za jego pomocą wystawić sobie certyfikat do szyfrowania poczty. Tego Let’s Encrypt nie potrafi, ale kto wie. Może w przyszłości i taka opcja się pojawi.
Póki co Let’s Encrypt oferuje nam całkowicie zautomatyzowany proces generowania certyfikatów SSL, w tym od jakiegoś czasu także certyfikatów wildcard. To ogromny skok, bowiem StartSSL nie był do końca automatyczny i na taki certyfikat czekało się zwykle kilka godzin. Let’s Encrypt robi to w pełni automatycznie.
Wymaga to co prawda zainstalowania agenta na serwerze, ale jest to lekka pythonowa aplikacja. Co ciekawe posiada także funkcję automatycznego odnawiania certyfikatu, więc nie musimy pamiętać o tym, że certyfikat nam wygaśnie. Wystarczy tylko odpowiednia konfiguracja aplikacji na serwerze, dodanie zadania do crona i z głowy. Let’s Encrypt dodatkowo także wymaga podania e-maila, ale nie wysyła on (jeszcze) żadnych niechcianych reklam. E-mail może być przydatny jeśli nie odnowimy certyfikatu z wyprzedzeniem lub nie ustawiliśmy autoodnawiania. Firma nam o tym przypomni stosownymi komunikatami:
Zalety Let’s Encrypt:
- zupełnie bezpłatny,
- nie wymaga dokumentów, wszystko robimy online,
- możliwość wygenerowania certyfikatu typu wildcard,
- bezpieczeństwo na poziomie komercyjnych certyfikatów,
- w pełni automatyczny proces,
- certyfikat jest uznawany przez centra autoryzacji,
- podnosimy bezpieczeństwo
Wiemy już czym jest Let’s Encrypt, wiemy już jakie ma zalety, ale na pewno niektórzy zastanawiają się (zwykle Ci co nie mieli z tym styczności) czy taki bezpłatny certyfikat jest bezpieczny? Otóż, technologicznie jest to certyfikat pełnoprawny, odpowiadający komercyjnym rozwiązaniom. Różnica polega na tym, że nie otrzymujemy gwarancji finansowej na złamanie certyfikatu. Dawniej StartSSL w darmowej wersji oferował symboliczną sumę 10$ w sytuacji złamania go przez hakerów, jednak nigdy nie słyszałem, aby taki certyfikat został złamany. Z Let’s Encryptem jest podobnie. Nie słychać by do tej pory został złamany lub skompromitowany.
Spokojnie można nim zabezpieczać komunikację nawet na produkcyjnych środowiskach – jest w pełni bezpieczny. Ja używam go w ponad setce projektów komercyjnych i jako osoba z dużym doświadczeniem w bezpieczeństwie uważam go za bezpieczny.
Przygotowanie do instalacji
Let’s Encrypta możemy zainstalować w systemie np. Debian z repozytorium i mieć gotowca. Zalecałbym jednak zainstalowanie tej aplikacji z repozytorium Let’s Encrypta, gdyż ta aplikacja potrafi nieco więcej niż stabilny dinozaur w repozytorium Debiana. Podobnie jest w CentOSie, więc nie będziemy rozdrabniać się na poszczególne systemy.
Aktualizacja systemu:
apt-get update
apt-get upgrade
Instalacja agenta
Let’s Encrypt do poprawnego działania wymaga zainstalowania agenta o nazwie Certbot. To właśnie dzięki niemu generujemy certyfikaty lub je odnawiamy.
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto
Uruchomienie aplikacji:
certbot-auto
Aplikacja zapyta nas o instalację niezbędnych pakietów dla systemu. Głównie będą to pythonowe libki, bo jak wspomniałem aplikacja jest napisana w Pythonie.
Akceptujemy wszystko.
Sprawdzamy wersję:
root@debian-4gb-hel1-1:~# certbot-auto –version
certbot 1.6.0
W chwili pisania artykułu wyszła najnowsza wersja oznaczona numerkiem 1.6.0.
Generowanie certyfikatu
Aby wygenerować certyfikat, korzystamy z linii poleceń w systemie Linux.
certbot certonly –webroot -w /var/www/html -d test5.hosterion.pl
W odpowiedzi otrzymamy informację o poprawnym wystawieniu certyfikatu oraz o ścieżce, gdzie został on wrzucony. Tą ścieżkę podpinamy w serwerze www.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for test5.hosterion.pl
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification…
Cleaning up challenges
Subscribe to the EFF mailing list (email: qtop@wir.pl).
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test5.hosterion.pl/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test5.hosterion.pl/privkey.pem
Your cert will expire on 2020-10-07. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
„certbot-auto renew”
– If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Po załadowaniu certyfikatu do serwera www i przeładowaniu powinniśmy móc już korzystać z naszej strony po bezpiecznym protokole SSL.
Automatyzacja
Certyfikat mamy wystawiony, ale certyfikaty te są ważne maksymalnie 3 miesiące od dnia wystawienia. Czy będziemy o tym pamiętać? A co jeśli e-mail z informacją wpadnie do spamu lub zostanie odrzucony?
Aby zapobiec sytuacji, w której certyfikat nam wygaśnie możemy zastosować jednolinijkowca, który przegeneruje nam certyfikat ponownie przed końcem (na miesiąc przed końcem) i przeładuje za nas serwer www.
Poniższą linijkę warto wrzucić do crona:
45 01 * * * perl -e 'sleep int(rand(3600))’ && /usr/local/bin/certbot-auto renew –renew-hook „systemctl reload nginx” -q >> /var/log/certbot-renew.log 2>&1
Dzięki temu, nie zapomnimy na pewno o wygasającym certyfikacie, a system dodatkowo zaloguje nam wszystko co się dzieje.
Trochę to skomplikowane i wymaga serwera Linux.
Łatwiej chyba będzie z ZeroSSL (https://www.sslforfree.com/) a skutek ten sam.
Nie jest zbyt skomplikowane, z resztą skonfigurujesz raz i zapomnisz 🙂
Stosuję od dawna, szybko sprawnie i przyjemnie 🙂
Co do poziomu skomplikowania – wydaje mi się, że to dobra opcja dla osób mających swój serwer, a więc już trochę obeznanych z jakimś *nixem – wtedy instalacja i konfiguracja nie stanowi większego problemu.
… [Trackback]
[…] Find More on that Topic: wladcysieci.pl/2021/05/06/bezplatne-certyfikaty-ssl-dla-strony-od-lets-encrypt/ […]
… [Trackback]
[…] Here you will find 17057 more Info on that Topic: wladcysieci.pl/2021/05/06/bezplatne-certyfikaty-ssl-dla-strony-od-lets-encrypt/ […]