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

Sécurisez Apache avec Lets Encrypt sur CentOS 7

Let's Encrypt est une autorité de certification gratuite, automatisée et ouverte développée par l'Internet Security Research Group (ISRG). Les certificats émis par Let's Encrypt sont valides pendant 90 jours à compter de la date d'émission et sont aujourd'hui approuvés par tous les principaux navigateurs.

Dans ce didacticiel, nous couvrirons les étapes nécessaires pour installer un certificat SSL Let's Encrypt gratuit sur un serveur CentOS 7 exécutant Apache en tant que serveur Web. Nous utiliserons l'utilitaire certbot pour obtenir et renouveler les certificats Let's Encrypt.

Prérequis #

Assurez-vous que vous avez satisfait aux prérequis suivants avant de poursuivre ce didacticiel :

  • Avoir un nom de domaine pointant vers l'adresse IP de votre serveur public. Nous utiliserons example.com .
  • Apache est installé et en cours d'exécution sur votre serveur.
  • Disposez d'un hôte virtuel Apache 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 :

yum install mod_ssl openssl

Installer Certbot #

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

Le package certbot peut être installé à partir d'EPEL. Si le référentiel EPEL n'est pas installé sur votre système, vous pouvez l'installer à l'aide de la commande suivante :

sudo yum install epel-release

Une fois le référentiel EPEL activé, installez le package certbot en tapant :

sudo yum install certbot

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 dans ce cas, 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 notre 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 apache /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Pour éviter la duplication de code, 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
SSLCipherSuite 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

L'extrait ci-dessus inclut les déchiqueteuses recommandées, active l'agrafage OCSP, HTTP Strict Transport Security (HSTS) 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, nous pouvons exécuter l'outil Certbot avec le plugin webroot et obtenir les fichiers de certificat SSL en tapant :

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 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 est livré avec la version 2.4.6 d'Apache, qui n'inclut pas le SSLOpenSSLConfCmd directif. Cette directive n'est disponible que sur Apache 2.4.8 ultérieur et est utilisée pour la configuration des paramètres OpenSSL tels que l'échange de clés Diffie-Hellman (DH).

Nous devrons créer un nouveau fichier combiné en utilisant le certificat SSL Let's Encrypt et le fichier DH généré. Pour cela, tapez :

cat /etc/letsencrypt/live/example.com/cert.pem /etc/ssl/certs/dhparam.pem >/etc/letsencrypt/live/example.com/cert.dh.pem

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

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

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.

Redémarrez le service Apache pour que les modifications prennent effet :

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 le crontab commande pour créer un nouveau cronjob qui renouvellera le certificat, créera un nouveau fichier combiné incluant la clé DH et redémarrera 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"

Enregistrez et fermez le fichier.

Pour tester le processus de renouvellement, vous pouvez utiliser la commande certbot suivie du --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.


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

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

  3. Installez Zenario avec Apache, PHP et MariaDB sur CentOS 7

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

  5. Installer Apache sur CentOS 8

Comment installer ElkArte Forum avec Apache et Lets Encrypt SSL sur CentOS 8

Comment installer Shopware 6 avec NGINX et Lets Encrypt sur CentOS 8

Comment installer PrestaShop avec Apache et Lets Encrypt SSL sur CentOS 8

Comment installer Let's Encrypt SSL avec Apache sur CentOS 7

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

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