Ostatnimi czasy Let's encrypt wprowadził do swojej oferty darmowe certyfikaty typu Wildcard. Jest to bardzo duże ułatwienie dla osób które posiadają wiele subdomen i nie chcą generować dla każdej z nich oddzielnego certyfikatu.
Czym jest Wildard
Wildcart to najprościej mówiąc certyfikat który działa dla domeny example.com
a także dla wszystkich subdomen czyli *.example.com
.
Dzięki takiemu rozwiązaniu możemy mieć 1 certyfikat i używać go dla wszystkich swoich subdomen.
Wymagania
Aby uzyskać nowy typ certyfikatu będziemy potrzebowali przede wszystkim certbot >= v2.22.0
. Dodatkowo przyda się npm
Dodatkowo chcemy uzyskać taki certyfikat dla OVH więc potrzebujemy jeszcze dodatkowego pluginu np: certbot-dns-ovh
i to na nim będę opierał wpis.
Przygotowania
Instalacja Certbot
Wpierw instalujemy certbot
odpowiednio dla naszego systemu. U mnie był to Ubuntu 16.04:
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
Dla innych systemów możecie znaleźć instrukcje tutaj: https://certbot.eff.org
Instalacja Certbot OVH Plugin
Żeby autoryzować nasze domeny będziemy potrzebowali dodatkowego pluginu:
cd /opt
git clone https://github.com/mcdado/certbot-dns-ovh.git
cd certbot-dns-ovh
npm install
Konfiguracja dla OVH
Wpierw musimy uzyskać niezbędne dane aby móc się podpiąć po API do OVH i wykonać niezbędne operacje.
Wchodzimy najpierw do https://eu.api.ovh.com/createApp/ i wypełniamy tam wszystkie pola.
Account ID or email address oraz Password to są nasze dane logowania do panelu OVH
Application name to tak na prawdę dowolna nazwa. Ja użyłem CertBot.
Application description tu również pełna dowolność.
Po utworzeniu aplikacji dostaniemy zestaw Application Key i Application Secret które musimy sobie zapisać.
Teraz musiny jeszcze uzyskać consumer key aby to zrobić odpalamy
node /opt/certbot-dns-ovh/bin/authorize.js\ --endpoint=ovh-eu\ --app_key=yourappkey\ --app_secret=yourappsecret
opwiednio uzupełniając
app_key
iapp_secret
z poprzedniego kroku.W odpowiedzi uzyskamy coś takiego:
{ validationUrl: 'https://eu.api.ovh.com/auth/?credentialToken=IQKuZRnhSNg9ny79nGFD1gZXfns71hXE2RgIr47lXaMv9vIvtaDCIZqfR', consumerKey: '93niM3kADzDiocoN78H*DvQmNNIBr', state: 'pendingValidation' }
Wchodzimy w link podany w
validationUrl
z poprzedniego kroku i logujemy się na stronie. Wymagane jest to aby certbot mógł pobierać dane z API.Teraz musimy jeszcze wyedytować plik konfiguracyjny:
cd /opt/certbot-dns-ovh cp .env.example .env nano .env
Wpisujemy wszystkie uzyskane dane z OVH i zapisujemy.
Generowanie certyfikatu
Aby wygenerować nowy certyfikat Wildcard odpalamy polecenie:
certbot certonly --manual --preferred-challenges=dns-01\
--manual-auth-hook '/opt/certbot-dns-ovh/bin/create-record.js'\
--manual-cleanup-hook '/opt/certbot-dns-ovh/bin/delete-record.js'\
--server https://acme-v02.api.letsencrypt.org/directory\
-d *.example.com -d example.com
Waże jest aby wygenerować certyfikat dla domeny głównej example.com
jak i subdomen *.example.com
bo to nie są równoważne adresy.
W tym momencie certbot spróbuje połączyć się poprzez API do OVH. Gdy to się powiedzie doda nowy rekord TXT, zweryfikuje czy się udało, a następnie usunie go.
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
-------------------------------------------------------------------------------
NOTE: The IP of this machine will be publicly logged as having requested this
certificate. If you're running certbot in manual mode on a machine that is not
your server, please ensure you're okay with that.
Are you OK with your IP being logged?
-------------------------------------------------------------------------------
(Y)es/(N)o: y
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2018-06-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot 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
Jeśli wszystko poszło zgodnie z planem dostaniemy swój certyfikat wraz z informacjami gdzie został zapisany.
Odnowienie certyfikatu
Aby odnowić certyfikat wystarczy tylko uruchomić polecenie
certbot renew --quiet
Możemy sobie wrzucić ten wpis do crona np:
@weekly certbot renew --quiet && service nginx reload
Konieczny jest reload Nginx lub innego serwera WWW aby wczytały się nowe certyfikaty.
Certbot sam zadba o odnowienie, więc jeśli certyfikat jest ważny jeszcze przez długi czas to nie nastąpi próba odnowienia go.
Problemy
Czasami mogą się pojawić rózne problemy. Ja u siebie zaobserwoałem kilka. Wtedy trzeba sprawdzić czy wszystko jest ok:
- Czy poprawnie wykonaliśmy generowanie kluczy Application Key i Secre oraz czy nie pomyliliśmy się przy ich wpisywaniu
- Czy zalogowaliśmy się na stronę w pkt.2 konfiguracji
- Czy rekord A/AAA domeny dla której chcemy uzyskać certyfikat wskazuje poprawnie na IP serwera z którego chcemy go uzyskać.
Jeśli dalej będą problemy to chętnie postaram się pomóc.