
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:
cd /usr/local/sbin
wget https://dl.eff.org/certbot-autoNie zapomnij nadać plikowi prawa do wykonywania:
chmod a+x /usr/local/sbin/certbot-autoKrok 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:
nano /etc/nginx/sites-available/defaultWewnątrz bloku server dodaj:
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.
nginx -tJeśli wszystko gra, zrestartuj Nginksa:
service nginx restartKrok 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:
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.comCertbot 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:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Zajmie 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:
nano /etc/nginx/sites-available/defaultUsuwamy (albo komentujemy) następujące linie, które nasłuchują na porcie 80 dla żądań HTTP:
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;Zamiast tego nasłuchujemy na porcie 443 dla HTTPS:
listen 443 ssl;Do bloku server dodajemy też dowiązanie symboliczne, które wskazuje na certyfikaty wygenerowane komendą certbot-auto:
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:
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).
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:
nginx -tNastępnie zrestartuj serwer Nginx:
service nginx restartKrok 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.
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reloadW 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
···


