Darmowy certyfikat SSL Let’s Encrypt na serwerze Nginx

Darmowy certyfikat SSL Let’s Encrypt na serwerze Nginx

Let’s Encrypt to urząd certyfikacji, który daje prosty sposób na zdobycie i zainstalowanie darmowych certyfikatów TLS/SSL, czyli na szyfrowanie ruchu HTTPS na twoich serwerach WWW. Cały proces upraszcza program Certbot, który automatyzuje większość wymaganych kroków. Warto o tym pomyśleć, bo Chrome ostrzega użytkowników przed niezabezpieczonymi stronami, a to potrafi odbić się na pozycjach w wyszukiwarce.

W tym poradniku pokazuję, jak zdobyć darmowy certyfikat SSL od Let’s Encrypt dla Nginksa na Ubuntu 14.04. Pokazuję też, jak ustawić automatyczne odnawianie certyfikatu (certyfikat Let’s Encrypt jest ważny tylko 90 dni).

Krok 1, instalacja Certbota

Czym jest Certbot? To narzędzie, które włącza HTTPS na stronie, wdrażając certyfikaty Let’s Encrypt. Jeśli nie używasz Nginksa albo Ubuntu 14.04, zajrzyj na ich stronę, opisują procedurę generowania certyfikatów Let’s Encrypt dla każdego systemu.

Zaczynamy od pobrania Certbota do katalogu /usr/local/sbin:

code
cd /usr/local/sbin
wget https://dl.eff.org/certbot-auto

Nie zapomnij nadać plikowi prawa do wykonywania:

code
chmod a+x /usr/local/sbin/certbot-auto

Krok 2, zdobycie certyfikatu

Żeby Certbot miał dostęp do odpowiedniego katalogu, poprawmy najpierw konfigurację Nginksa. Domyślnie leży ona w /etc/nginx/sites-available/default. Ja użyję nano, ale możesz edytować plik w dowolnym edytorze:

code
nano /etc/nginx/sites-available/default

Wewnątrz bloku server dodaj:

code
server {

#votre configuration ...

location ~ /.well-known {
        allow all;
    }

}

Będziesz potrzebować katalogu publicznego swojej strony. Przy domyślnym pliku konfiguracyjnym będzie to /usr/share/nginx/html, a przy Laravelu /path/to/public/.
Sprawdź, czy konfiguracja nie zawiera błędów.

code
nginx -t

Jeśli wszystko gra, zrestartuj Nginksa:

code
service nginx restart

Krok 3, konfiguracja TLS/SSL na serwerze Nginx

Znamy już ścieżkę do katalogu publicznego, więc możemy poprosić o certyfikat SSL przy użyciu pluginu Webroot. Nazwy domen podajemy opcją -d. Jeśli certyfikat ma obsługiwać kilka domen (na przykład exemple.com i www.exemple.com), wypisz je wszystkie, zaczynając od domeny najwyższego poziomu (czyli exemple.com). Podmień też zaznaczone fragmenty na własną ścieżkę webroot i własne nazwy domen:

code
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.com

Certbot zada kilka pytań, między innymi o adres e-mail, to na niego przyjdzie ostrzeżenie o zbliżającym się wygaśnięciu certyfikatu. Automatyczne odnawianie skonfigurujemy dalej.

Certyfikaty

Po wygenerowaniu certyfikatu dostajesz następujące pliki:

  • cert.pem: certyfikat twojej domeny
  • chain.pem: certyfikat Let’s Encrypt
  • fullchain.pem: cert.pem i chain.pem połączone w jeden plik
  • privkey.pem: klucz prywatny certyfikatu.

Pliki lądują w podkatalogu /etc/letsencrypt/archive. Klient Let’s Encrypt tworzy jednak dowiązania symboliczne do najnowszych certyfikatów w katalogu /etc/letsencrypt/live/votre_nom_de_domaine. Ponieważ dowiązania zawsze wskazują na najnowsze certyfikaty, to właśnie tej ścieżki używaj w konfiguracji.

Wygenerowanie klucza Diffie-Hellmana

Żeby jeszcze podnieść poziom bezpieczeństwa, wygeneruj 2048-bitowy klucz Diffie-Hellmana:

code
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Zajmie to kilka minut, ale na koniec masz plik DH w /etc/ssl/certs/dhparam.pem.

Certyfikat SSL już jest, więc teraz trzeba skonfigurować serwer Nginx, żeby z niego korzystał.
Zaczynamy od ponownej edycji bloku server:

code
nano /etc/nginx/sites-available/default

Usuwamy (albo komentujemy) następujące linie, które nasłuchują na porcie 80 dla żądań HTTP:

code
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;

Zamiast tego nasłuchujemy na porcie 443 dla HTTPS:

code
listen 443 ssl;

Do bloku server dodajemy też dowiązanie symboliczne, które wskazuje na certyfikaty wygenerowane komendą certbot-auto:

code
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;

Dokładamy domyślną konfigurację SSL serwera:

code
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

Na koniec, poza głównym blokiem server, dodaj ten nowy blok, który przekieruje ruch HTTP (port 80) na HTTPS (port 443).

code
server {
    listen 80;
    listen [::]:80;
    server_name exemple.com www.exemple.com;
    return 301 https://$host$request_uri;
}

Sprawdź, czy konfiguracja nie ma błędów:

code
nginx -t

Następnie zrestartuj serwer Nginx:

code
service nginx restart

Krok 4, automatyczne odnawianie certyfikatu

Jak pisałem na początku, certyfikaty SSL wygasają po 90 dniach i trzeba je odnawiać. Jeśli o tym zapomnisz, przed wygaśnięciem certyfikatu Let’s Encrypt przyjdzie e-mail z przypomnieniem.

Żeby odnawianie działało samo, dodajemy komendę certbot-auto renew do crona na serwerze.

code
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload

W każdy poniedziałek o 2:30 odnawiamy certyfikat, a o 2:35 restartujemy serwer Nginx.

Podsumowanie

Masz serwer WWW z certyfikatem SSL od Let’s Encrypt. To dobra alternatywa dla certyfikatów płatnych. Wielu hostingodawców, na przykład OVH, udostępnia SSL za darmo właśnie dzięki Let’s Encrypt. Warto z tego skorzystać, tym bardziej że Google konsekwentnie popycha strony w stronę HTTPS.

źródło: digitalocean.com & wikipedia.org

···

Damien Flandrin Web developer od 2010 roku, twórca Gekkode i Email Impact. Każdy artykuł jest sprawdzany na prawdziwym projekcie przed publikacją. Kontakt
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.