GNU/Linux >> Znalost Linux >  >> Ubuntu

Zabezpečte Apache pomocí Lets Encrypt na Ubuntu 20.04

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 vysvětluje, jak nainstalovat bezplatný certifikát Let’s Encrypt SSL na Ubuntu 20.04, na kterém běží 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, 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í certifikátu použijeme certbot. Jedná se o nástroj příkazového řádku, který automatizuje úlohy získávání a obnovování certifikátů Let’s Encrypt SSL.

Balíček certbot je součástí výchozích úložišť Ubuntu. Aktualizujte seznam balíčků a nainstalujte certbot pomocí následujících příkazů:

sudo apt updatesudo apt 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 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-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Chcete-li předejít duplikaci kódu a zajistit snadnější údržbu konfigurace, vytvořte následující dva fragmenty konfigurace:

/etc/apache2/conf-available/letsencrypt.conf
Alias /.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.conf
SSLProtocol             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)"

SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem" 

Header always set Strict-Transport-Security "max-age=63072000"

Výše uvedený fragment 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í.

Před povolením konfiguračních souborů se ujistěte, že oba mod_ssl a mod_headers jsou povoleny vydáním:

sudo a2enmod sslsudo a2enmod headers

Dále povolte konfigurační soubory SSL spuštěním následujících příkazů:

sudo a2enconf letsencryptsudo a2enconf ssl-params

Povolte modul HTTP/2, díky kterému budou vaše stránky rychlejší a robustnější:

sudo a2enmod http2

Znovu načtěte konfiguraci Apache, aby se změny projevily:

sudo systemctl reload apache2

Nyní můžeme spustit nástroj Certbot s pluginem webroot a získat soubory certifikátu SSL:

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-10-06. 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

  Redirect permanent / https://example.com/
</VirtualHost>

<VirtualHost *:443>
  ServerName 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

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í. 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 soubor tak, aby vypadal následovně:

/etc/cron.d/certbot
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 apache2"

Chcete-li otestovat proces obnovení, můžete použít certbot --dry-run přepínač:

sudo certbot renew --dry-run

Pokud nejsou žádné chyby, znamená to, že proces obnovení byl úspěšný.


Ubuntu
  1. Jak zabezpečit Nginx pomocí Lets Encrypt na Ubuntu 20.04 / 18.04

  2. Jak zabezpečit Apache pomocí Lets Encrypt na Ubuntu 18.04

  3. Jak zabezpečit připojení SSL s Apache na Ubuntu 18.04

  1. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 18.04

  2. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 16.04

  3. Zabezpečte Apache pomocí Lets Encrypt na Ubuntu 18.04

  1. Zabezpečte Nginx pomocí Lets Encrypt na Ubuntu 20.04

  2. Zabezpečte Apache pomocí Lets Encrypt na CentOS 8

  3. Zabezpečte Apache pomocí Lets Encrypt na Debianu 9