Zabezpiecz swoją stronę za darmo certyfikatem SSL od Let's Encrypt
bezpieczenstwo,linux,sslCzęść 1 z 2
- Zabezpiecz swoją stronę za darmo certyfikatem SSL od Let's Encrypt
- Let's Encrypt z Dockerem i Traefik — automatyczne HTTPS dla każdej usługi
To historyczny zapis konfiguracji z 2016 roku — acme.sh i Apache na Debianie Jessie. Działało bez zarzutu. Dla nowoczesnego podejścia z Dockerem i Traefik zapraszam do wpisu kontynuacji.
Przed Let's Encrypt uzyskanie zaufanego certyfikatu SSL wymagało płacenia komerycjnemu CA (Comodo, DigiCert, GoDaddy) od 200 do kilku tysięcy złotych rocznie, ręcznej weryfikacji tożsamości i samodzielnej obsługi odnowień. Let's Encrypt uruchomił się w 2015 roku, wyszedł z bety w kwietniu 2016 i zmienił to całkowicie: darmowe certyfikaty Domain Validation, automatyczne wydawanie przez protokół ACME, 90-dniowy czas ważności z wbudowaną obsługą odnowień. Dla małych serwerów i prywatnych stron działających dotychczas na HTTP była to pierwsza praktyczna droga do HTTPS.
Oficjalny klient Certbot nie był jeszcze dostępny w repozytoriach Debiana Jessie, więc skorzystałem z jednego z alternatywnych klientów — prostego skryptu bash: https://github.com/Neilpang/acme.sh
Używając tego skryptu można wszystko zrobić dosłownie w 5 minut.
Wymagania
- Dostęp root do serwera
- Apache działający na Debianie Jessie
- Domena wskazująca na publiczne IP serwera
- Otwarty port 80 (używany przez challenge HTTP-01 do weryfikacji własności domeny)
Na wstępie ustalmy, że wszystko wykonujemy z roota oraz:
/root/.acme.sh/acme.sh # miejsce składowania skryptów klienta
mojastrona.pl # strona, dla której chcemy uzyskać certyfikat
/mnt/www/mojastrona.pl # katalog na dysku naszej strony
/etc/apache2 # lokalizacja Apache wraz z plikami konfiguracji
Krok 1 — Pobierz klienta
Przechodzimy do katalogu /root/.acme.sh/acme.sh (tworzymy jeśli nie istnieje) i wykonujemy:
git clone https://github.com/Neilpang/acme.sh
Jeśli nie mamy gita, pobieramy pliki ręcznie ze strony projektu i wypakowujemy.
Krok 2 — Symlink dla wygody
ln -s /root/.acme.sh/ /etc/apache2/letsencrypt
Krok 3 — Pobierz certyfikat
Upewniamy się, że strona jest dostępna z internetu, następnie:
./acme.sh issue /mnt/www/mojastrona.pl/ mojastrona.pl
Lub jeśli mamy aliasy (np. www.mojastrona.pl):
./acme.sh issue /mnt/www/mojastrona.pl/ mojastrona.pl www.mojastrona.pl
acme.sh umieszcza tymczasowy plik w webroocie, Let's Encrypt go pobiera, żeby zweryfikować że kontrolujesz domenę, i wydaje certyfikat. Pliki zapisane zostaną w:
/root/.acme.sh/mojastrona.pl/
Krok 4 — Konfiguracja Apache
Wskazujemy Apache na nowe certyfikaty w pliku virtual hosta:
SSLCACertificateFile /etc/apache2/letsencrypt/mojastrona.pl/ca.cer
SSLCertificateFile /etc/apache2/letsencrypt/mojastrona.pl/mojastrona.pl.cer
SSLCertificateKeyFile /etc/apache2/letsencrypt/mojastrona.pl/mojastrona.pl.key
Następnie przeładowujemy Apache:
service apache2 reload
Od tego momentu strona powinna serwować certyfikat Let's Encrypt.
Krok 5 — Automatyczne odnawianie
Certyfikaty mają ważność 90 dni. Aby odnawiać automatycznie, tworzymy wykonywalny skrypt acme_cron:
#!/bin/sh
/root/.acme.sh/acme.sh/acme.sh cron >> /var/log/le-renew.log
service apache2 reload
I przenosimy go do /etc/cron.daily.

Proces nie jest skomplikowany — po pierwszej konfiguracji odnawianie przebiega w pełni automatycznie.
Ta konfiguracja działała sprawnie, dopóki nie przeniosłem wszystkiego na Dockera. Nowoczesne podejście z Traefik obsługuje Let's Encrypt automatycznie — bez skryptów, bez crona, bez ręcznej konfiguracji. Więcej: Let's Encrypt z Dockerem i Traefik.