Pewnego razu do testów potrzebowałem zaufanego certyfikatu SSL. Wtedy pomyślałem, czy po tylu latach korzystania z płatnych certyfikatów, ktoś zaczął udostępniać je za darmo ? Np. na potrzeby stron niekomercyjnych. No i faktycznie - jest : Let`s Encrypt

Szybko przechodzimy na bardziej konkretny link czyli: certbot Wybieramy typ naszego serwera WWW i system operacyjny (w moim przypadku było to: Apache i Ubuntu 16.04) Następnie zostajemy przekierowani na stronę z dokładną instrukcją (parę komend).

W tym momencie zaczęły się problemy, bo certbot nie chciał zweryfikować mojego serwera.

Wpisy w DNS sprawdziłem: ok. Adres dla którego chciałem pobrać certyfikat posiadał na serwerze działającą stronę WWW, na porcie 80. Błąd o nieudanej autoryzacji posiada co prawda sporo wpisów w sieci ale bardzo różnych i nie dających jednoczesnych odpowiedzi. W końcu przeglądając dokumentację do cerbota, zdecydowałem żeby użył swojego, wbudowanego serwera i dokonał autoryzacji. Najpierw oczywiście wyłączyłem Apacha.

systemctl stop apache2
certbot certonly --standalone -d www.mojadomena.pl

Udało się ! Mój certyfikat jest w katalogu /etc/letsencrypt/live/www.mojadomena.pl

W konfiguracji Apache dla tej strony będzie wyglądało to tak:

SSLCertificateFile /etc/letsencrypt/live/www.mojadomena.pl/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.mojadomena.pl/privkey.pem 

Pozostaje jeszcze kwestia odnowienia certyfikatu za 90 dni. Przetestujmy jak to będzie działać:

certbot renew --dry-run

No i dostaliśmy błąd że na porcie 443 coś już ‘siedzi’. No tak, certbot zapamiętał że używaliśmy jego serwera i próbował go uruchomić. Gdy wyłączymy Apacha, test się uda. Trzeba jednak pamiętać że certbot dokonał nam wpisu w cronie, tak aby w odpowiednim momencie odnowić certyfikat (plik /etc/cron.d/certbot) i trzba gdzieś wstawić stopowanie i startowanie Apache’a. Na podstawie instrukcji https://certbot.eff.org/docs/using.html mamy do dyspozycji dwie lokalizacje gdzie certbot uruchomi znajdujące się tam pliki wykonywalne :

  • przed pobieraniem certyfikatu - /etc/letsencrypt/renewal-hooks/pre
  • po pobraniu certyfikatu - /etc/letsencrypt/renewal-hooks/post i umieszczamy tam skrypty odpowiednio stopujące i startujące Apache’a.

Na koniec ponownie testujemy komendą ertbot renew --dry-run czy całość zadziała poprawnie.