Let’s Encrypt je bezplatná, automatizovaná a otevřená certifikační autorita vyvinutá organizací Internet Security Research Group (ISRG), která poskytuje bezplatné certifikáty SSL.
Certifikáty vydané Let’s Encrypt jsou důvěryhodné pro všechny hlavní prohlížeče a jsou platné 90 dní od data vydání.
Tento tutoriál vysvětluje, jak nainstalovat bezplatný certifikát Let’s Encrypt SSL na CentOS 8 se systémem Apache jako webový server. K získání a obnovení certifikátů použijeme nástroj certbot.
Předpoklady #
Než budete pokračovat, ujistěte se, že jsou splněny následující předpoklady:
- Mějte název domény odkazující na IP vašeho veřejného serveru. Použijeme
example.com
. - Apache je nainstalován a spuštěn na vašem serveru s virtuálním hostitelem nakonfigurovaným pro vaši doménu.
- Porty 80 a 443 jsou ve vaší bráně firewall otevřené.
Nainstalujte následující balíčky, které jsou vyžadovány pro webový server šifrovaný SSL:
sudo dnf install mod_ssl openssl
Když je balíček mod_ssl nainstalován, měl by vytvořit self-signedkey a soubory certifikátu pro localhost. Pokud se soubory nevytvoří automaticky, můžete je vytvořit pomocí openssl
příkaz:
sudo openssl req -newkey rsa:4096 -x509 -sha256 -days 3650 -nodes \
-out /etc/pki/tls/certs/localhost.crt \
-keyout /etc/pki/tls/private/localhost.key
Instalovat Certbot #
Certbot je bezplatný nástroj příkazového řádku, který zjednodušuje proces získávání a obnovování certifikátů Let’s Encrypt SSL z vašeho serveru a automatické povolení HTTPS na vašem serveru.
Balíček certbot není součástí standardních repozitářů CentOS 8, ale lze jej stáhnout z webu dodavatele.
Spusťte následující wget
příkaz jako uživatel root nebo sudo ke stažení skriptu certbot do /usr/local/bin
adresář:
sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto
Po dokončení stahování udělejte soubor spustitelným:
sudo chmod +x /usr/local/bin/certbot-auto
Generate Strong Dh (Diffie-Hellman) Group #
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. Vygenerujte novou sadu 2048bitových parametrů DH pro posílení zabezpečení:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Velikost můžete změnit 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 požadovaná doména se překládá na server, na kterém běží certbot.
Aby bylo nastavení 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 apache /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Chcete-li se vyhnout duplikaci kódu a zajistit snadnější údržbu konfigurace, vytvořte následující dva fragmenty konfigurace:
/etc/httpd/conf.d/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/httpd/conf.d/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"
Výše uvedený úryvek používá štěpkovače doporučené Mozillou. Umožňuje sešívání OCSP, HTTP Strict Transport Security (HSTS), klíč Dh a vynucuje několik hlaviček HTTP zaměřených na zabezpečení.
Znovu načtěte konfiguraci Apache, aby se změny projevily:
sudo systemctl reload httpd
Nyní můžete spustit skript certbot s pluginem webroot a načíst soubory certifikátu SSL:
sudo /usr/local/bin/certbot-auto certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Po úspěchu vytiskne certbot 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-01-26. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto 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ž je vše nastaveno, upravte konfiguraci virtuálního hostitele domény následovně:
/etc/httpd/conf.d/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 /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/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>
Výše uvedená konfigurace vynucuje přesměrování HTTPSand z www na verzi bez www. Umožňuje také HTTP/2, díky kterému budou vaše stránky rychlejší a robustnější. Můžete si upravit konfiguraci podle svých potřeb.
Restartujte službu Apache:
sudo systemctl restart httpd
Nyní můžete svůj web otevřít 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í. Abychom automaticky obnovili certifikáty před vypršením jejich platnosti, vytvoříme cronjob, který se bude spouštět dvakrát denně a automaticky obnoví jakýkoli certifikát 30 dní před vypršením jeho platnosti.
Spuštěním následujícího příkazu vytvořte nový cronjob, který obnoví certifikát a restartuje Apache:
echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | sudo tee -a /etc/crontab > /dev/null
Chcete-li otestovat proces obnovení, použijte příkaz certbot následovaný příkazem --dry-run
přepínač:
sudo /usr/local/bin/certbot-auto renew --dry-run
Pokud nejsou žádné chyby, znamená to, že proces obnovení byl úspěšný.