Let’s Encrypt je bezplatná, automatizovaná a otevřená certifikační autorita vyvinutá organizací Internet Security Research Group (ISRG). 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.
V tomto tutoriálu probereme kroky potřebné k instalaci bezplatného certifikátu Let's Encrypt SSL na server CentOS 7, na kterém běží Apache jako webový server. K získání a obnovení certifikátů Let’s Encrypt použijeme nástroj certbot.
Předpoklady #
Než budete pokračovat v tomto kurzu, ujistěte se, že jste splnili 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.
- Mějte pro svou doménu virtuální hostitele Apache.
- 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:
yum install mod_ssl openssl
Instalovat Certbot #
Certbot je nástroj, který zjednodušuje proces získávání certifikátů SSL z Let’s Encrypt a automatické povolení HTTPS na vašem serveru.
Balíček certbot je dostupný pro instalaci z EPEL. Pokud úložiště EPEL není na vašem systému nainstalováno, můžete jej nainstalovat pomocí následujícího příkazu:
sudo yum install epel-release
Jakmile je úložiště EPEL povoleno, nainstalujte balíček certbot zadáním:
sudo yum install certbot
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 v takovém případě může generování 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 naši 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 do něj 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, 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.confSSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
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
# Requires Apache >= 2.4
SSLCompression off
SSLUseStapling on
SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
# Requires Apache >= 2.4.11
SSLSessionTickets Off
Výše uvedený fragment obsahuje doporučené čipy, umožňuje sešívání OCSP, HTTP Strict Transport Security (HSTS) 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ůžeme spustit nástroj Certbot s pluginem webroot a získat soubory certifikátu SSL zadáním:
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 2018-12-07. 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"
- 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
CentOS 7 je dodáván s Apache verze 2.4.6, která neobsahuje SSLOpenSSLConfCmd
směrnice. Tato direktiva je k dispozici pouze na Apache 2.4.8 později a používá se pro konfiguraci parametrů OpenSSL, jako je výměna klíčů Diffie–Hellman (DH).
Budeme muset vytvořit nový kombinovaný soubor pomocí certifikátu Let’s Encrypt SSL a vygenerovaného souboru DH. Chcete-li to provést, zadejte:
cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem
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
<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/cert.dh.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.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.
Restartujte službu Apache, aby se změny projevily:
sudo systemctl restart httpd
Nyní můžete otevřít 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í. 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.
Spusťte crontab
příkaz k vytvoření nového cronjob, který obnoví certifikát, vytvoří nový kombinovaný soubor včetně DH klíče a restartuje apache:
sudo crontab -e
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload httpd"
Uložte a zavřete soubor.
Chcete-li otestovat proces obnovení, můžete použít příkaz certbot následovaný příkazem --dry-run
přepínač:
sudo certbot renew --dry-run
Pokud nejsou žádné chyby, znamená to, že proces obnovení byl úspěšný.