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.
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.
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
W kolejnym kroku zostaniemy zapytani o konfigurację protokołów HTTP/HTTPS. Do wyboru mamy dwie opcje: Easy oraz Secure.
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
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”.
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.
Komentarze
„Google premiuje w swoim rankingu wyszukiwarki witryny posługujące się szyfrowanymi połączeniami” – źródło (a najlepiej potwierdzenie w praktyce)?
https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html
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.
Ładnie zebrane dlaczego warto:
https://scotthelme.co.uk/still-think-you-dont-need-https/
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.
Czy ten certyfikat jest zaufany? czy gdy będę otwierać stronę z tym certyfikatem dostanę informację że certyfikat jest niezaufany?
Zajrzyj na https://test.z3s.pl
Czemu tylko A a nie A+ ??
A komu by się chciało HSTS ustawiać ;)
Idą Twoim tokiem myślenia, poco robić update systemu i aplikacji skoro wszytko działa :)
Przydatne i przyzwoicie wytlumaczone, nawet dla takiego smiecia jak ja.
A czemu ocena w ssllabs tylko A? poradnik powinien wytłumaczyć jak dojść wyżej w ocenie
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?
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.
Dzięki, przydatny artykuł.
Po co został użyty python? W czym ta pythonowa biblioteka jest lepsza od „czystego” certbota?
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
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.
Hmmm, a na moim Let’s Encrypt wyciska A+
Może to przez więcej ramu albo co ;)
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).
Jeśli chodzi o funkcjonalność to lepiej mieć swój certyfikat, a A+ można mieć z Let’s Encrypt bez problemu!.
A czy Cron nie powinien jeszcze reloadować Apache’a, żeby wczytał najnowszy certyfikat?
CertBot ma plugin do obsługi Apache, nie trzeba ręcznie robić przeładowania konfigu.
Dzięki za info! Tego nie wiedziałem.
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.
Wytłumaczysz jak chcesz to technicznie zrobić? bo nie widzę tutaj takiej możliwości :)
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.
Wiecie może czy nadal to tak wygląda? Czy mając dostęp SSH w nazwa.pl da się to zautomatyzować?
„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
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?
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.
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 ?????