GNU/Linux >> Tutoriels Linux >  >> Cent OS

Sécurisez Apache avec Lets Encrypt sur CentOS 8

Let's Encrypt est une autorité de certification gratuite, automatisée et ouverte développée par l'Internet Security Research Group (ISRG) qui fournit des certificats SSL gratuits.

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

Ce tutoriel explique comment installer un certificat SSL Let's Encrypt gratuit sur CentOS 8 exécutant Apache en tant que serveur Web. Nous utiliserons l'outil certbot pour obtenir et renouveler les certificats.

Prérequis #

Assurez-vous que les conditions préalables suivantes sont remplies avant de continuer :

  • Avoir un nom de domaine pointant vers l'adresse IP de votre serveur public. Nous utiliserons example.com .
  • Apache est installé et exécuté sur votre serveur avec un hôte virtuel configuré pour votre domaine.
  • Les ports 80 et 443 sont ouverts dans votre pare-feu.

Installez les packages suivants qui sont requis pour un serveur Web crypté SSL :

sudo dnf install mod_ssl openssl

Lorsque le package mod_ssl est installé, il doit créer une clé auto-signée et des fichiers de certificat pour l'hôte local. Si les fichiers ne sont pas créés automatiquement, vous pouvez les créer en utilisant le openssl commande :

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

Installer Certbot #

Certbot est un outil de ligne de commande gratuit qui simplifie le processus d'obtention et de renouvellement des certificats SSL Let's Encrypt et l'activation automatique de HTTPS sur votre serveur.

Le package certbot n'est pas inclus dans les référentiels CentOS 8 standard, mais il peut être téléchargé à partir du site Web du fournisseur.

Exécutez le wget suivant commande en tant qu'utilisateur root ou sudo pour télécharger le script certbot dans /usr/local/bin répertoire :

sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto

Une fois le téléchargement terminé, rendez le fichier exécutable :

sudo chmod +x /usr/local/bin/certbot-auto

Générer le numéro de 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é. Générez un nouveau jeu de paramètres DH 2048 bits pour renforcer la sécurité :

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

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 la configuration, 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 apache /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

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

/etc/httpd/conf.d/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/httpd/conf.d/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"

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

Rechargez la configuration Apache pour que les modifications prennent effet :

sudo systemctl reload httpd

Maintenant, vous pouvez exécuter le script certbot avec le plugin webroot et récupérer les fichiers de certificat 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

En cas de 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-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

Maintenant que tout est configuré, modifiez la configuration de l'hôte virtuel de votre domaine comme suit :

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

La configuration ci-dessus force HTTPS et la redirection de www vers une version non www. Il active également HTTP/2, ce qui rendra vos sites plus rapides et plus robustes. N'hésitez pas à ajuster la configuration selon vos besoins.

Redémarrez le service Apache :

sudo systemctl restart httpd

Vous pouvez maintenant ouvrir 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, nous allons créer une tâche cron qui s'exécutera deux fois par jour et renouvellera automatiquement tout certificat 30 jours avant son expiration.

Exécutez la commande suivante pour créer un nouveau cronjob qui renouvellera le certificat et redémarrera 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

Pour tester le processus de renouvellement, utilisez la commande certbot suivie du --dry-run commutateur :

sudo /usr/local/bin/certbot-auto renew --dry-run

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


Cent OS
  1. Comment installer le serveur Web Apache sur CentOS 7

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

  3. Sécurisez Apache avec Let's Encrypt sur CentOS 7 - Processus étape par étape ?

  4. Comment installer Let's Encrypt avec Apache sur CentOS 7

  5. Comment sécuriser Apache avec Lets Encrypt sur Ubuntu 18.04

Sécurisez Nginx avec Lets Encrypt sur Debian 9

Sécurisez Apache avec Lets Encrypt sur Debian 10

Comment sécuriser le serveur Web Apache avec Let's Encrypt sur RHEL 8

Comment sécuriser le serveur CentOS 7 avec ModSecurity

Comment sécuriser Apache avec Let's Encrypt sur CentOS 8

Comment sécuriser Nginx avec Let's Encrypt sur CentOS 8