Let’s Encrypt je certifikační autorita vytvořená organizací Internet Security Research Group (ISRG). Poskytuje bezplatné certifikáty SSL prostřednictvím plně automatizovaného procesu navrženého tak, aby eliminoval ruční vytváření, ověřování, instalaci a obnovování certifikátů.
Certifikáty vydané Let’s Encrypt jsou platné 90 dní od data vydání a dnes jim důvěřují všechny hlavní prohlížeče.
Tento tutoriál ukazuje, jak nainstalovat bezplatný certifikát Let’s Encrypt SSL na Debian 10, Buster se systémem Apache jako webový server. Také si ukážeme, jak nakonfigurovat Apache pro použití certifikátu SSL a povolení HTTP/2.
Předpoklady #
Než budete pokračovat s průvodcem, ujistěte se, že jsou splněny následující předpoklady:
- Přihlášen jako uživatel root nebo uživatel s právy sudo.
- Doména, pro kterou chcete získat certifikát SSL, musí odkazovat na IP vašeho veřejného serveru. Použijeme
example.com
. - Apache nainstalován.
Instalace Certbota #
K získání a obnovení certifikátů použijeme nástroj certbot.
Certbot je plně vybavený a snadno použitelný nástroj, který automatizuje úlohy získávání a obnovování certifikátů Let’s Encrypt SSL a konfiguraci webových serverů pro použití certifikátů.
Balíček certbot je součástí výchozích repozitářů Debianu. Chcete-li nainstalovat certbot, spusťte následující příkazy:
sudo apt update
sudo apt install certbot
Generování silné Dh (Diffie-Hellman) skupiny #
Výměna klíčů Diffie–Hellman (DH) je metoda bezpečné výměny kryptografických klíčů přes nezabezpečený komunikační kanál.
Spuštěním následujícího příkazu vygenerujte nový 2048bitový klíč DH:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Pokud chcete, můžete změnit velikost až na 4096 bitů, ale generování může trvat déle než 30 minut v závislosti na entropii systému.
Získání certifikátu Let’s Encrypt SSL #
K získání certifikátu SSL pro doménu použijeme plugin Webroot, který funguje tak, že vytvoří dočasný soubor pro ověření požadované domény v ${webroot-path}/.well-known/acme-challenge
adresář. Server Let's Encrypt odesílá požadavky HTTP na dočasný soubor, aby ověřil, že se požadovaná doména překládá na server, na kterém běží certbot.
Aby to bylo jednodušší, namapujeme všechny požadavky HTTP pro .well-known/acme-challenge
do jednoho adresáře, /var/lib/letsencrypt
.
Spuštěním následujících příkazů vytvořte adresář a udělejte jej zapisovatelný pro server Apache.
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Chcete-li se vyhnout duplikaci kódu, vytvořte následující dva fragmenty konfigurace:
/etc/apache2/conf-available/letsencrypt.confAlias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
<Directory "/var/lib/letsencrypt/">
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
/etc/apache2/conf-available/ssl-params.confSSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-Content-Type-Options nosniff
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
Kód ve výše uvedeném fragmentu používá čipy doporučené Mozillou, umožňuje sešívání OCSP, HTTP Strict Transport Security (HSTS) a vynucuje několik hlaviček HTTP zaměřených na zabezpečení.
Ujistěte se, že oba mod_ssl
a mod_headers
jsou načteny:
sudo a2enmod ssl
sudo a2enmod headers
Povolte modul HTTP/2, díky kterému budou vaše stránky rychlejší a robustnější:
sudo a2enmod http2
Povolte konfigurační soubory SSL:
sudo a2enconf letsencrypt
sudo a2enconf ssl-params
Znovu načtěte konfiguraci Apache, aby se změny projevily:
sudo systemctl reload apache2
K získání souborů certifikátu SSL použijte nástroj Certbot s pluginem webroot:
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Pokud je certifikát SSL úspěšně získán, certbot vytiskne následující zprávu:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com/privkey.pem
Your cert will expire on 2020-04-02. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Nyní, když máte soubory certifikátu, upravte konfiguraci virtuálního hostitele domény následovně:
/etc/apache2/sites-available/example.com.conf<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
Protocols h2 http/1.1
<If "%{HTTP_HOST} == 'www.example.com'">
Redirect permanent / https://example.com/
</If>
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# Other Apache Configuration
</VirtualHost>
S výše uvedenou konfigurací vynucujeme přesměrování HTTPSand z www na verzi bez www. Můžete si upravit konfiguraci podle svých potřeb.
Znovu načtěte službu Apache, aby se změny projevily:
sudo systemctl reload apache2
Otevřete svůj web pomocí https://
a všimnete si zelené ikony zámku.
Pokud svou doménu otestujete pomocí testu SSL Labs Server Test, získáte známku A+, jak je uvedeno níže:
Automatické obnovení certifikátu Let’s Encrypt SSL #
Certifikáty Let’s Encrypt jsou platné 90 dní. Aby se automaticky obnovily certifikáty před vypršením jejich platnosti, vytvoří balíček certbot cronjob, který se spouští dvakrát denně a automaticky obnoví jakýkoli certifikát 30 dní před vypršením jeho platnosti.
Jakmile je certifikát obnoven, musíme také znovu načíst službu Apache. Připojte --renew-hook "systemctl reload apache2"
do /etc/cron.d/certbot
takže to vypadá následovně:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew --renew-hook "systemctl reload apache2"
Chcete-li otestovat proces obnovení, použijte certbot --dry-run
přepínač:
sudo certbot renew --dry-run
Pokud nejsou žádné chyby, znamená to, že proces obnovení byl úspěšný.