GNU/Linux >> Tutoriels Linux >  >> Debian

Sécurisez Apache avec Lets Encrypt sur Debian 10

Let's Encrypt est une autorité de certification créée par l'Internet Security Research Group (ISRG). Il fournit des certificats SSL gratuits via un processus entièrement automatisé conçu pour éliminer la création, la validation, l'installation et le renouvellement manuels des certificats.

Les certificats émis par Let's Encrypt sont valides pendant 90 jours à compter de la date d'émission et approuvés par tous les principaux navigateurs aujourd'hui.

Ce tutoriel montre comment installer un certificat SSL Let's Encrypt gratuit sur Debian 10, Buster exécutant Apache en tant que serveur Web. Nous montrerons également comment configurer Apache pour utiliser le certificat SSL et activer HTTP/2.

Prérequis #

Assurez-vous que les conditions préalables suivantes sont remplies avant de poursuivre avec le guide :

  • Connecté en tant qu'utilisateur root ou utilisateur avec des privilèges sudo.
  • Le domaine pour lequel vous souhaitez obtenir le certificat SSL doit pointer vers l'IP de votre serveur public. Nous utiliserons example.com .
  • Apache installé.

Installation de Certbot #

Nous utiliserons l'outil certbot pour obtenir et renouveler les certificats.

Certbot est un outil complet et facile à utiliser qui automatise les tâches d'obtention et de renouvellement des certificats SSL Let's Encrypt et de configuration des serveurs Web pour utiliser les certificats.

Le paquet certbot est inclus dans les référentiels Debian par défaut. Exécutez les commandes suivantes pour installer certbot :

sudo apt updatesudo apt install certbot

Génération du groupe Strong Dh (Diffie-Hellman) #

L'échange de clés Diffie-Hellman (DH) est une méthode d'échange sécurisé de clés cryptographiques sur un canal de communication non sécurisé.

Exécutez la commande suivante pour générer une nouvelle clé DH de 2 048 bits :

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Si vous le souhaitez, vous pouvez modifier la taille jusqu'à 4096 bits, mais la génération peut prendre plus de 30 minutes, selon l'entropie du système.

Obtention d'un certificat SSL Let's Encrypt #

Pour obtenir un certificat SSL pour le domaine, nous allons utiliser le plugin Webroot qui fonctionne en créant un fichier temporaire pour valider le domaine demandé dans le ${webroot-path}/.well-known/acme-challenge annuaire. Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour valider que le domaine demandé correspond au serveur sur lequel le certbot s'exécute.

Pour simplifier, nous allons mapper toutes les requêtes HTTP pour .well-known/acme-challenge dans un seul répertoire, /var/lib/letsencrypt .

Exécutez les commandes suivantes pour créer le répertoire et le rendre accessible en écriture pour le serveur Apache.

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp www-data /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Pour éviter la duplication de code, créez les deux extraits de configuration suivants :

/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)"

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"

Le code dans l'extrait ci-dessus utilise les chippers recommandés par Mozilla, active l'agrafage OCSP, HTTP Strict Transport Security (HSTS) et applique quelques en-têtes HTTP axés sur la sécurité.

Assurez-vous que mod_ssl et mod_headers sont chargés :

sudo a2enmod sslsudo a2enmod headers

Activez le module HTTP/2, qui rendra vos sites plus rapides et plus robustes :

sudo a2enmod http2

Activez les fichiers de configuration SSL :

sudo a2enconf letsencryptsudo a2enconf ssl-params

Rechargez la configuration Apache pour que les modifications prennent effet :

sudo systemctl reload apache2

Utilisez l'outil Certbot avec le plugin webroot pour obtenir les fichiers de certificat SSL :

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Si le certificat SSL est obtenu avec succès, certbot imprimera le message suivant :

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

Maintenant que vous disposez des fichiers de certificat, modifiez la configuration de l'hôte virtuel de votre domaine comme suit :

/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>

Avec la configuration ci-dessus, nous forçons HTTPS et la redirection de www vers une version non www. N'hésitez pas à ajuster la configuration selon vos besoins.

Rechargez le service Apache pour que les modifications prennent effet :

sudo systemctl reload apache2

Ouvrez votre site Web en utilisant https:// , et vous remarquerez une icône de cadenas vert.

Si vous testez votre domaine à l'aide du test de serveur SSL Labs, vous obtiendrez une note A+, comme indiqué ci-dessous :

Certificat SSL à renouvellement automatique #

Les certificats de Let’s Encrypt sont valides pendant 90 jours. Pour renouveler automatiquement les certificats avant leur expiration, le package certbot crée une tâche cron qui s'exécute deux fois par jour et renouvellera automatiquement tout certificat 30 jours avant son expiration.

Une fois le certificat renouvelé, nous devons également recharger le service Apache. Ajouter --renew-hook "systemctl reload apache2" au /etc/cron.d/certbot fichier de sorte qu'il ressemble à ce qui suit :

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

Pour tester le processus de renouvellement, utilisez le certbot --dry-run commutateur :

sudo certbot renew --dry-run

S'il n'y a pas d'erreurs, cela signifie que le processus de renouvellement a réussi.


Debian
  1. Sécurisez Apache avec Lets Encrypt sur Ubuntu 18.04

  2. Sécurisez Nginx avec Lets Encrypt sur Ubuntu 20.04

  3. Sécurisez Apache avec Lets Encrypt sur Ubuntu 20.04

  4. Sécurisez Apache2 avec Let's Encrypt SSL sur Debian 10/11

  5. Comment installer Let's Encrypt SSL avec Apache sur Debian 11

Comment installer DokuWiki avec Lets Encrypt SSL sur Debian 11

Installez TaskBoard avec Apache et laissez Encrypt SSL sur Debian 11

Comment installer SuiteCRM avec Apache et Lets Encrypt SSL gratuit sur Debian 11

Comment installer InvoicePlane avec Apache et Free Lets Encrypt SSL Certificate sur Debian 11

Comment installer Discourse Forum avec Nginx et Free Lets Encrypt SSL sur Debian 11

Comment installer et configurer Apache avec Let's Encrypt TLS/SSL sur Debian 11 Bullseye