W moim małym rankingu najważniejszych wydarzeń związanych z internetem w czołówce znajduje się powstanie usługi Let’s Encrypt, dzięki czemu certyfikaty SSL/TLS dla stron internetowych (połączenie szyfrowane HTTPS) stały się dostępne właściwie dla każdego zainteresowanego, i to za darmo. Nawet w przypadku hostingu współdzielonego jest to już coraz częściej dostępne (jako usługa, lub poprzez ręczną instalację certyfikatów w panelu). To, czego brakowało w przypadku niektórych stron/projektów, to tzw. certyfikatów Wildcard, czyli takich, które obejmują nie tylko domenę główną i wybrane subdomeny (np. www), ale wszystko – nawet to, co jeszcze nie istnieje… Kilka(naście) godzin temu to się zmieniło i certyfikaty Wildcard zawitały do Let’s Encrypt.

Let’s Encrypt, ACME v2 i certyfikaty Wildcard

Sam wprawdzie nie odczuwałem jakiegoś większego „niedoboru” związanego z brakiem certyfikatów typu Wildcard dostępnych w ramach Let’s Encrypt, to jednak czasem zdarzał mi się wdrażać jakiś projekt, w którym tego typu rozwiązanie (certyfikat Wildcard) był wymagany, albo – przynajmniej – bardzo pomocny. Do wczoraj jeszcze, w takich przypadkach nie miałem wyjścia, i korzystałem z komercyjnych certyfikatów tego typu, które nie dość, że są płatne (logiczne), to zazwyczaj ich koszt jest dużo wyższy niż standardowych – na domenę i jedną subdomenę (np. www). Wadą komercyjnych certyfikatów jest również to, że muszę pamiętać o ich ręcznym przedłużeniu, a w przypadku certyfikatów Let’s Encrypt wszystko za mnie robi skrypt.

Wczoraj wieczorem (naszego czasu) w serwisie Let’s Encrypt pojawiła się informacja o tum, że wraz z wdrożeniem usługi w nowej wersji (ACME v2) pojawiły się również certyfikaty typu Wildcard. Oczywiście bezpłatne.

Certyfikat Wildcard

Zanim przejdziemy do wdrożenia certyfikatów Wildcard, małe wyjaśnienie czym one są, dla osób, które pierwszy spotykają się z takim określeniem.

Certyfikat Wildcard, to specjalny rodzaj certyfikatu, który pozwala na wykorzystanie go w przypadku dowolnej liczby subdomen w obrębie naszej domeny. Standardowe certyfikaty zazwyczaj przypisujemy do domeny, i możemy do tego dodać jedną subodmenę, np. www:

  • webinsider.pl
  • www.webinsider.pl

W przypadku certyfikatów typu Wildcard generujemy je wprawdzie dla konkretnej domeny, ale działają one również dla dowolnych subdomen, i to bez potrzeby ich definiowania na etapie tworzenia certyfikatu, np.:

  • webinsider.pl
  • www.webinsider.pl
  • outlink.webinsider.pl
  • piwik.webinsider.pl
  • cdn.webinsider.pl
  • mail.webinsider.pl
  • cokolwiek.webinsider.pl

W przypadku standardowego certyfikatu (domena i subdomena www) strona Webinsider.pl jest wyświetlana w przeglądarkach w ramach połączenia szyfrowanego, czyli bezpiecznego (HTTPS). Ale w momencie, gdy wskażemy losową subdomenę, dla której nie ma wystawionego i skonfigurowanego oddzielnego certyfikatu, zamiast strony pojawi się ostrzeżenie, że połączenie nie jest bezpieczne:

Jest to jak najbardziej prawidłowa reakcja przeglądarki, bo w powyższym przykładzie wykorzystywany certyfikat został wystawiony dla domeny webinsider.pl i subdomeny www, czyli www. webisndier.pl, i odwołanie do każdej innej subdomeny (i domeny) przy tym certyfikacie spowoduje wyświetlenie powyższego błędu.

Ale wystarczy zamiast certyfikatu domena + jedna subdomena podstawić certyfikat Wildcard wystawiony dla domeny Webinsider.pl (*.webisndier.pl) by połączenie było już bezpieczne, choć subdomena test.webinsider.pl nie była zdefiniowana podczas tworzenia tego certyfikatu:

I to chyba tyle jeśli chodzi o teorię, pora na praktykę, czyli wdrożenie certyfikatu Let’s Encrypt Wildcard na serwerze…

Wdrożenie certyfikatu Let’s Encrypt Wildcard

Z racji tego, że o instalacji i konfiguracji certyfikatów Let’s Encrypt już kiedyś pisałem, to zdecydowanie zalecam lekturę tego artykułu, bo tutaj skoncentruję się tylko na różnicach, które wynikają z wdrożenia ACME v2, i certyfikatów Let’s Encrypt.

W przypadku standardowych certyfikatów (dla wskazanych domen i subdomen) polecenie generowania certyfikatu będzie wyglądać np. tak:

sudo letsencrypt certonly -a webroot -w /var/www/webinsider.pl/ -d webinsider.pl -d www.webinsider.pl

Teoretycznie w ten sposób można by wygenerować certyfikat Wildcard:

sudo letsencrypt certonly -a webroot -w /var/www/webinsider.pl/public_html/ -d *.webinsider.pl

Teoretycznie, bo – przynajmniej na obecną chwilę – ACME v1 nie wspiera certyfikatów Wildcard, i zakończy się to komunikatem błędu:

The currently selected ACME CA endpoint does not support issuing wildcard certificates.

Dlatego, by w tej chwili wygenerować certyfikat Let’s Encrypt typu Wildcard należy posłużyć się poleceniem:

sudo letsencrypt certonly --agree-tos --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory -d '*.webinsider.pl'

W tym momencie korzystamy z nowego API (acme-v02), które wspiera generowanie certyfikatów tego typu. Musimy też w procesie weryfikacji – w trybie manualnym – zgodzić się na na logowanie adresu IP serwera (jest to jedno z  pytań w trakcie procesu generowania certyfikatu).

Dodatkowo generowanie certyfikatu typu Wildcard wiąże się z tym, że musimy udowodnić swoje uprawnienia do całej domeny, a możemy tego dokonać poprzez weryfikację uprawnień do modyfikowania strefy DNS domeny:

Oznacza to, że musimy dla naszej domeny dodać nowy rekord TXT, o wskazanej wartości, np.:

_acme-challenge.webinsider.pl IN TXT "RCQtDj1T-kJSJ3Yqt_lgv_sHiWv9FPbiqBT6KYdtpJk"

To może być w niektórych przypadkach najtrudniejszy (najdłuższy) krok, bo nie zawsze rekordy DNS w naszej strefie są aktualizowane na bieżąco, a każde kolejne wywołanie procesu generowania certyfikatu spowoduje wygenerowanie nowej wartości do wpisania w rekordzie TXT.

Z racji tego, że ja w przypadku swoich domen korzystam z usługi Cloudflare, m.in. właśnie do zarządzania wpisami DNS, to u mnie cała procedura trwałą poniżej minuty. Dzięki czemu już po chwili mogłem zobaczyć komunikat potwierdzający wygenerowanie certyfikatu Wildcard:

W tym momencie można usunąć rekord TXT z DNSów, bo przy automatycznym odnawianiu certyfikatu nie będzie on już wykorzystywany, a przy ponownym, ręcznym generowaniu i tak zostanie wygenerowana nowa wartość dla tego rekordu.

Na koniec wystarczyło zmienić konfigurację vHosta dla domeny Webinsider.pl, i certyfikat SSL typu Wildcard od Let’s Encrypt był prawidłowo rozpoznawany przez przeglądarki:

Przydatne, zwłaszcza w sytuacji, gdy na jednym serwerze mamy zainstalowane różne usługi działające na własnych subdomenach, bo dzięki temu nie tylko wystarczy jeden certyfikat zamiast kilku, ale również proces uruchomienia dodatkowej usługi na kolejnej subdomenie jest szybszy i wygodniejszy, bo odpada generowanie i konfigurowanie kolejnego certyfikatu…

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk