O co chodzi z tym szyfrowaniem??
Posiadanie certyfikatu SSL do komunikacji z serwerem WWW, jest obecnie nie tyle przywilejem co koniecznością. W dobie dbania o prywatność przesyłanych danych giganty technologiczne takie jak google zamierzają utrudniać życie administratorom, których strony nie dbają o odpowiednie szyfrowanie komunikacji.
Na szczęście dla nas istnieje ciekawe oraz proste rozwiązanie takiego problemu. Organizacja non profit jaką jest Internet Seciurity and Reaserch Group (ISRG) powołało do życia niezależny otwarty ośrodek certyfikacji, dzięki któremu możemy tworzyć certyfikaty dla naszych domen za darmo. Mowa jest oczywiście o certyfikatach wydawanych przez Let’s Encrypt.
Certyfikaty Let’s Encrypt są powszechnie akceptowane przez najpopularniejsze przeglądarki internetowe dzięki czemu, jeśli poprawnie zainstalujemy certyfikat będzie pojawiać się nam popularna „kłódka” przy adresie naszej strony a przeglądarki nie będą krzyczeć o niebezpiecznym połączeniu. Wadą tego rozwiązania jest konieczność odnawiania certyfikatów co trzy miesiące, co implikuje często konieczność zastosowania odpowiedniego narzędzia po stronie serwera. Dodatkowo do niedawna, aby poprawnie wygenerować certyfikat należało podać nie tylko adres głównej domeny jaka do nas należy ale również podać wszystkie kombinacje nazw subdomen, jeśli chcieliśmy z nich korzystać np. „admin.myadress.com” lub „ftp.myadress.com”. Jednak od marca 2018 roku można generować tzw. Certyfikaty Wildcard, które umożliwiają poprawną komunikacja nie tylko z główną domeną, ale również z wszystkimi poddomenami – o ile z takich korzystamy.
Certbot – dobry duch w walce o szyfrowanie sieci.
Poza samą możliwością generowania certyfikatów dla naszych domen powstało jeszcze narzędzie ułatwiające pracę. Jest nim program o wdzięcznej nazwie CertBot. Czym jest CertBot? Może niech sam o sobie opowie:
W skrócie CertBot jest to program, który pomoże nam wygenerować oraz w wielu przypadkach skonfigurować serwer WWW do poprawnej pracy z certyfikatami Let’s Encrypt.
Docker – Kiedy kontener jest nam bardzo pomocny.
Docker jest potężnym oraz bardzo przydatnym narzędziem, kiedy chcemy w bezpieczny sposób tworzyć i rozpowszechniać środowiska programistyczne. Bardzo często wykorzystuje się konteneryzację do tworzenia tzw. środowisk rozproszonych. Przy wykorzystaniu kontenerów możemy w wygodny sposób opracować narzędzia do pracy, które będą niezależne od systemu hosta oraz dadzą nam pewność korzystania z unifikowanych bibliotek. Do naszych potrzeb wykorzystamy gotowy kontener przygotowany do uruchomienia Certbot’a, wykonania kilku czynności oraz zakończenia pracy kontenera w wyniku czego dostaniemy gotowy certyfikat SSL. Kolejną zaletą wykorzystania kontenerów Docker’a jest pewność, że korzystamy z najnowszego oprogramowania. Niestety aktualnie rozwiązanie nie pozwala na automatyczną konfigurację serwera WWW. Ale coś za coś. Dostaniemy certyfikat Wildcard oraz możliwość łatwego odnawiania co kilka miesięcy.
Konfiguracja środowiska
Słowem wstępu.
Zakładam, że tematy takie jak połączenie SSH oraz podstawowe komendy i polecenia powłoki Bash nie są Tobie obce. Wszystkie czynności będziemy wykonywać w terminalu połączeni przez SSH z naszym serwerem.
Zwracam również uwagę, aby umieścić skrypt w odpowiednim folderze i miejscu na serwerze, ponieważ Qnap po restarcie czyści większość domyślnych katalogów systemowych. Można do tego celu wykorzystać aplikację Entwre-ng lub któryś z katalogów w naszym systemie plików.
Dodatkowo przedstawiam rozwiązanie opierające się o domenę znajdującą się na serwerach OVH, ponieważ sam taką domenę posiadam. Spokojnie po drobnych modyfikacjach można wykorzystać tą metodę do wykorzystania innych hostingów. Lista dostępnych puginów do Certbota znajduje się poniżej:
Każdy plugin obsługuje inny typ autoryzacji domeny oraz różne funkcjonalności – np. można bezproblemowo skonfigurować serwer Apache lub Nginx. Dla nas najważniejsza kategoria to tzw. DNS Plugins, przy pomocy których wykonamy testy dns domeny.
Jak widać pluginów DNS jest sporo dzięki czemu nie jesteśmy skazani tylko na hosting OVH.
Skoro już wszystko wiemy, przystępujemy do pracy…
W folderze, w którym będziemy trzymać skrypt należy stworzyć trzy katalogi:
Dalej przechodzimy do katalogu ovh, w którym tworzymy specjalny plik o nazwie ovhSecret.ini
sam plik edytujemy ulubionym edytorem I wklejamy poniższy kod:
Idąc dalej trzeba wejść pod ten adres (OVH Developers : Discover OVH products API & functions - OVH)i wygenerować token dostępowy do naszego konta. Dane z tokena przeklejamy w odpowiedni pola w pliku.
Słowem wyjaśnienia. Certbot wykorzysta wygenerowany klucz, aby dostać się do serwerów DNS naszej strony utworzyć tam specjalną subdomenę oraz przechwycić ruch jaki zostanie na nią wysłany. Jeśli przekierowanie z subdomeny zostanie wykryte przez Certbota to będzie oznaczać, że strona należy do nas i można wygenerować dla niej certyfikat.
W katalogu głównym należy stworzyć plik o nazwie „cert.sh” i wkleić do niego poniższy kod:
W skrypcie należy wypełnić dwa pola: DOMAIN oraz EMAIL wpisując odpowiednio nazwę naszej domeny poprzedzoną gwiazdką np.: „*.mojadomena.pl” oraz adres kontaktowy email, na który przyjdzie nam powiadomienie o zbliżającym się końcu ważności certyfikatu.
Poniższemu skryptowi należy nadać uprawnienia do wykonywania:
Gdzie USER to nazwa użytkownika.
Jeśli wszystko wykonaliśmy dobrze do tej pory to można uruchomić skrypt i poczekać na pobranie oraz uruchomienie kontenera. Zobaczymy wtedy poniższy komunikat:
Gotowy certyfikat znajduje się w pod ścieżką:
Aby potwierdzić, że wszystko jest z certyfikatem OK, możemy przeprowadzić test wpisując w terminal:
Po czym zobaczymy:
Jeśli chcemy automatycznie odnawiać certyfikat należy dodać do Cron’a zadanie „./cert.sh renew” z częstotliwością uruchomienia raz w tygodniu. Częstotliwość ta jest wymagana, ponieważ mamy możliwość odnowienia certyfikatu na 10 dni przed jego wygaśnięciem, w związku z tym sprawdzając certyfikat raz w tygodniu na pewno trafimy w odpowiedni moment a zarazem nie będziemy zarzucać zapytaniami serwerów Let’s Encrypt.
I to tyle. Jeśli wszystko dobrze wykonaliśmy to mamy dobry certyfikat Wildcard SSL a nam pozostało podpięcie go pod serwer WWW.
Linki:
Google: Chromium Blog: Next steps toward more connection security
Certbot: Introduction — Certbot 0.26.0.dev0 documentation
Kontener Cerbot: https://hub.docker.com/r/certbot/certbot/
Tokeny OVH: https://eu.api.ovh.com/createToken/
Posiadanie certyfikatu SSL do komunikacji z serwerem WWW, jest obecnie nie tyle przywilejem co koniecznością. W dobie dbania o prywatność przesyłanych danych giganty technologiczne takie jak google zamierzają utrudniać życie administratorom, których strony nie dbają o odpowiednie szyfrowanie komunikacji.
Na szczęście dla nas istnieje ciekawe oraz proste rozwiązanie takiego problemu. Organizacja non profit jaką jest Internet Seciurity and Reaserch Group (ISRG) powołało do życia niezależny otwarty ośrodek certyfikacji, dzięki któremu możemy tworzyć certyfikaty dla naszych domen za darmo. Mowa jest oczywiście o certyfikatach wydawanych przez Let’s Encrypt.
Certyfikaty Let’s Encrypt są powszechnie akceptowane przez najpopularniejsze przeglądarki internetowe dzięki czemu, jeśli poprawnie zainstalujemy certyfikat będzie pojawiać się nam popularna „kłódka” przy adresie naszej strony a przeglądarki nie będą krzyczeć o niebezpiecznym połączeniu. Wadą tego rozwiązania jest konieczność odnawiania certyfikatów co trzy miesiące, co implikuje często konieczność zastosowania odpowiedniego narzędzia po stronie serwera. Dodatkowo do niedawna, aby poprawnie wygenerować certyfikat należało podać nie tylko adres głównej domeny jaka do nas należy ale również podać wszystkie kombinacje nazw subdomen, jeśli chcieliśmy z nich korzystać np. „admin.myadress.com” lub „ftp.myadress.com”. Jednak od marca 2018 roku można generować tzw. Certyfikaty Wildcard, które umożliwiają poprawną komunikacja nie tylko z główną domeną, ale również z wszystkimi poddomenami – o ile z takich korzystamy.
Certbot – dobry duch w walce o szyfrowanie sieci.
Poza samą możliwością generowania certyfikatów dla naszych domen powstało jeszcze narzędzie ułatwiające pracę. Jest nim program o wdzięcznej nazwie CertBot. Czym jest CertBot? Może niech sam o sobie opowie:
Certbot is part of EFF’s effort to encrypt the entire Internet. Secure communication over the Web relies on HTTPS, which requires the use of a digital certificate that lets browsers verify the identity of web servers (e.g., is that really google.com?). Web servers obtain their certificates from trusted third parties called certificate authorities (CAs). Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.
W skrócie CertBot jest to program, który pomoże nam wygenerować oraz w wielu przypadkach skonfigurować serwer WWW do poprawnej pracy z certyfikatami Let’s Encrypt.
Docker – Kiedy kontener jest nam bardzo pomocny.
Docker jest potężnym oraz bardzo przydatnym narzędziem, kiedy chcemy w bezpieczny sposób tworzyć i rozpowszechniać środowiska programistyczne. Bardzo często wykorzystuje się konteneryzację do tworzenia tzw. środowisk rozproszonych. Przy wykorzystaniu kontenerów możemy w wygodny sposób opracować narzędzia do pracy, które będą niezależne od systemu hosta oraz dadzą nam pewność korzystania z unifikowanych bibliotek. Do naszych potrzeb wykorzystamy gotowy kontener przygotowany do uruchomienia Certbot’a, wykonania kilku czynności oraz zakończenia pracy kontenera w wyniku czego dostaniemy gotowy certyfikat SSL. Kolejną zaletą wykorzystania kontenerów Docker’a jest pewność, że korzystamy z najnowszego oprogramowania. Niestety aktualnie rozwiązanie nie pozwala na automatyczną konfigurację serwera WWW. Ale coś za coś. Dostaniemy certyfikat Wildcard oraz możliwość łatwego odnawiania co kilka miesięcy.
Konfiguracja środowiska
Słowem wstępu.
Zakładam, że tematy takie jak połączenie SSH oraz podstawowe komendy i polecenia powłoki Bash nie są Tobie obce. Wszystkie czynności będziemy wykonywać w terminalu połączeni przez SSH z naszym serwerem.
Zwracam również uwagę, aby umieścić skrypt w odpowiednim folderze i miejscu na serwerze, ponieważ Qnap po restarcie czyści większość domyślnych katalogów systemowych. Można do tego celu wykorzystać aplikację Entwre-ng lub któryś z katalogów w naszym systemie plików.
Dodatkowo przedstawiam rozwiązanie opierające się o domenę znajdującą się na serwerach OVH, ponieważ sam taką domenę posiadam. Spokojnie po drobnych modyfikacjach można wykorzystać tą metodę do wykorzystania innych hostingów. Lista dostępnych puginów do Certbota znajduje się poniżej:
Każdy plugin obsługuje inny typ autoryzacji domeny oraz różne funkcjonalności – np. można bezproblemowo skonfigurować serwer Apache lub Nginx. Dla nas najważniejsza kategoria to tzw. DNS Plugins, przy pomocy których wykonamy testy dns domeny.
Jak widać pluginów DNS jest sporo dzięki czemu nie jesteśmy skazani tylko na hosting OVH.
Skoro już wszystko wiemy, przystępujemy do pracy…
W folderze, w którym będziemy trzymać skrypt należy stworzyć trzy katalogi:
Kod:
mkdir certs letsencrypt ovh
Dalej przechodzimy do katalogu ovh, w którym tworzymy specjalny plik o nazwie ovhSecret.ini
Kod:
cd ovh && touch ovhSecret.ini
sam plik edytujemy ulubionym edytorem I wklejamy poniższy kod:
Kod:
# OVH API credentials used by Certbot
dns_ovh_endpoint = ovh-eu
dns_ovh_application_key = MDAwMDAwMDAwMDAw
dns_ovh_application_secret = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
dns_ovh_consumer_key = MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Idąc dalej trzeba wejść pod ten adres (OVH Developers : Discover OVH products API & functions - OVH)i wygenerować token dostępowy do naszego konta. Dane z tokena przeklejamy w odpowiedni pola w pliku.
Słowem wyjaśnienia. Certbot wykorzysta wygenerowany klucz, aby dostać się do serwerów DNS naszej strony utworzyć tam specjalną subdomenę oraz przechwycić ruch jaki zostanie na nią wysłany. Jeśli przekierowanie z subdomeny zostanie wykryte przez Certbota to będzie oznaczać, że strona należy do nas i można wygenerować dla niej certyfikat.
W katalogu głównym należy stworzyć plik o nazwie „cert.sh” i wkleić do niego poniższy kod:
Kod:
#!/bin/bash
DOMAIN="**nazwa domeny**"
EMAIL="**Adres Email**"
KONTAINER=certbot/dns-ovh
HOSTDIR=$(pwd)
CERTDIR="${HOSTDIR}/certs"
LETSENCRYPTDIR="${HOSTDIR}/letsencrypt"
OVHSECRET="${HOSTDIR}/ovh"
DOCKERENV="-it --rm --name certbot -v "$CERTDIR:/etc/letsencrypt" -v "$LETSENCRYPTDIR:/var/lib/letsencrypt" -v "$OVHSECRET:/ovh""
CREATE="certonly --agree-tos --email "$EMAIL" --server https://acme-v02.api.letsencrypt.org/directory --dns-ovh --dns-ovh-credentials /ovh/ovhSecret.ini -d $DOMAIN"
TEST="renew --dry-run"
RENEW="renew"
function help {
echo " "
echo "******** DESCRIPTION **********"
echo "Script for Qnap server to create SSL cert in Docker kontainer.
It is using certbot and LetsEncrypt wildcard certyficates over
DNS OVH serwer validation."
echo " "
echo "******** USAGE **********"
echo " No argument: Creates new certyfiacate."
echo " test | TEST : It make validation of all available certyficates"
echo " renew | RENEW : Renews certificates."
echo " help | HELP : Print this help."
echo ""
echo "******** END ********"
}
if [ $# == 0 ]
then
docker run $DOCKERENV $KONTAINER $CREATE
elif [ $# == 1 ]
then
case $1 in
test|TEST)
docker run $DOCKERENV $KONTAINER $TEST
;;
renew|RENEW)
docker run $DOCKERENV $KONTAINER $RENEW
;;
help|HELP)
help
;;
*)
echo "****UKNOW OPTION TRY HELP****"
;;
esac
else [ $# > 1 ]
echo "To meny arguments!! Try help"
fi
exit 0
W skrypcie należy wypełnić dwa pola: DOMAIN oraz EMAIL wpisując odpowiednio nazwę naszej domeny poprzedzoną gwiazdką np.: „*.mojadomena.pl” oraz adres kontaktowy email, na który przyjdzie nam powiadomienie o zbliżającym się końcu ważności certyfikatu.
Poniższemu skryptowi należy nadać uprawnienia do wykonywania:
Kod:
sudo chmod x+ ./cert.sh USER
Gdzie USER to nazwa użytkownika.
Jeśli wszystko wykonaliśmy dobrze do tej pory to można uruchomić skrypt i poczekać na pobranie oraz uruchomienie kontenera. Zobaczymy wtedy poniższy komunikat:
Gotowy certyfikat znajduje się w pod ścieżką:
Kod:
./certs/live
Aby potwierdzić, że wszystko jest z certyfikatem OK, możemy przeprowadzić test wpisując w terminal:
Kod:
./cert.sh test
Po czym zobaczymy:
Jeśli chcemy automatycznie odnawiać certyfikat należy dodać do Cron’a zadanie „./cert.sh renew” z częstotliwością uruchomienia raz w tygodniu. Częstotliwość ta jest wymagana, ponieważ mamy możliwość odnowienia certyfikatu na 10 dni przed jego wygaśnięciem, w związku z tym sprawdzając certyfikat raz w tygodniu na pewno trafimy w odpowiedni moment a zarazem nie będziemy zarzucać zapytaniami serwerów Let’s Encrypt.
I to tyle. Jeśli wszystko dobrze wykonaliśmy to mamy dobry certyfikat Wildcard SSL a nam pozostało podpięcie go pod serwer WWW.
Linki:
Google: Chromium Blog: Next steps toward more connection security
Certbot: Introduction — Certbot 0.26.0.dev0 documentation
Kontener Cerbot: https://hub.docker.com/r/certbot/certbot/
Tokeny OVH: https://eu.api.ovh.com/createToken/