Pomoc Certyfikat SSL Wildcard - Certbot, Let's Encrypt, Docker

GoRo33

System Engineer
Q Specialist
24 Sierpień 2016
163
17
18
37
Szczecin
QNAP
TS-x53
Ethernet
1 GbE
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:

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:

apreview.ibb.co_c6S8kf_Pluginy_Certbot.png

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.

apreview.ibb.co_nosKrL_DNS_Plugins.png
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:

aimage.ibb.co_jrJvy0_Certyfikat_SSL.png

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:

aimage.ibb.co_mMEDkf_Test.png

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/
 
  • Lubię to
Reakcje: Ciangi
PROTIP: Jak piszesz posta/edytujesz (nie mówię o szybkiej edycji!) masz możliwość wklejenia obrazków - hostuje je wtedy silnik forum :)

Sprawdzę na początku miesiąca, nie wygląda na mega skomplikowane.

OK dzięki, nie wiedziałem. Nie jest to skomplikowane, dla OVH masz podane powyżej dla innych hostingów trzeba trochę zmodyfikować.
 
Dobry tutek, a ten no, masz może howto poprzez apache? bo w moim przypadku mam zarejestrowana domene w miejscu gdzie let's encrypt nie jest mile widziany i nie tworza zadnych tokenow….
 
Dobry tutek, a ten no, masz może howto poprzez apache? bo w moim przypadku mam zarejestrowana domene w miejscu gdzie let's encrypt nie jest mile widziany i nie tworza zadnych tokenow….

Tylko test po DNS'sie pozwala na stworzenie certyfikat wildcard. Możesz skorzystać z pluginu "apache" i wygenerować certyfikat dla ręcznie wypisanych subdomen przełącznik "-d".
 
dzięki wielkie - skonfigurowałem pod cloudflare i wszystko pięknie działa

pytanie - czy po restarcie qnapa wpis w crontabie zostanie usunięty?
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. certbot
  2. certyfikat serwera
  3. lets encrypt
  4. letsencrypt
  5. cerbot
  6. certyfikaty