Android

Sécurisez Apache avec Let's Encrypt sur Centos 7

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

1st Design of 2020 - Grab your balloons and follow along! - Q Corner Showtime LIVE! E39

Table des matières:

Anonim

Let's Encrypt est une autorité de certification ouverte, automatisée et gratuite développée par 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 approuvés par tous les principaux navigateurs aujourd'hui.

Dans ce didacticiel, nous allons couvrir 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.

Conditions préalables

Assurez-vous d'avoir satisfait aux conditions préalables suivantes avant de poursuivre ce didacticiel:

  • Ayez un nom de domaine pointant vers l'IP de votre serveur public. Nous utiliserons example.com .Apache est installé et fonctionne sur votre serveur.Avez l'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 des certificats SSL de Let's Encrypt et l'activation automatique de HTTPS sur votre serveur.

Le package certbot est disponible pour l'installation à 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 un 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 nouvel ensemble 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 en fonction de 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 . Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour valider que le domaine demandé est résolu sur le serveur sur lequel s'exécute certbot.

Pour le rendre plus simple, nous allons mapper toutes les requêtes HTTP pour .well-known/acme-challenge dans un répertoire unique, /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-known sudo chgrp apache /var/lib/letsencrypt sudo 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/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS /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 DENY 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 utilise les déchiqueteurs recommandés par Cipherli.st, active l'agrafage OCSP, HTTP Strict Transport Security (HSTS) et applique peu d'en-têtes HTTP axés sur la sécurité.

Rechargez la configuration Apache pour que les modifications prennent effet:

sudo systemctl reload

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:

CentOS 7 est livré avec Apache version 2.4.6, qui n'inclut pas la directive SSLOpenSSLConfCmd . Cette directive n'est disponible que sur Apache 2.4.8 ultérieurement et elle 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 ce faire, 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 installé, modifiez la configuration de l'hôte virtuel de votre domaine comme suit:

/etc/httpd/conf.d/example.com.conf

ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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 ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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 ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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 ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ 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

Avec la configuration ci-dessus, nous forçons HTTPS et redirige de la version www vers la 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

Vous pouvez maintenant ouvrir votre site Web en utilisant https:// et vous remarquerez une icône de verrouillage verte.

Renouvellement automatique du certificat SSL Let's Encrypt

Les certificats de Let's Encrypt sont valables 90 jours. Pour renouveler automatiquement les certificats avant leur expiration, nous créerons un cronjob qui s'exécutera deux fois par jour et renouvellera automatiquement tout certificat 30 jours avant son expiration.

Exécutez la commande crontab pour créer un nouveau cronjob qui renouvellera le certificat, créez un nouveau fichier combiné comprenant la clé DH et redémarrez 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

Enregistrez et fermez le fichier.

Pour tester le processus de renouvellement, vous pouvez utiliser la commande certbot suivie du --dry-run :

sudo certbot renew --dry-run

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

Conclusion

Dans ce didacticiel, vous avez utilisé le certbot client Let's Encrypt pour télécharger des certificats SSL pour votre domaine. Vous avez également créé des extraits Apache pour éviter la duplication de code et configuré Apache pour utiliser les certificats. À la fin du didacticiel, vous avez configuré un cronjob pour le renouvellement automatique des certificats.

apache centos chiffrons certbot ssl

Ce message fait partie de la pile d'installation de LAMP sur la série CentOS 7.

Autres articles de cette série:

• Comment installer Apache sur CentOS 7 • Installer MySQL sur CentOS 7 • Comment configurer les hôtes virtuels Apache sur CentOS 7 • Sécuriser Apache avec Let's Encrypt sur CentOS 7