====== Activer HTTPS avec Let's Encrypt - Ubuntu 22.04 ======
Documentation: [[https://letsencrypt.org/fr/docs/]]
==== 1. Modules Apache ====
Vérifier si les modules nécessaires sont bien activés.
sudo apachectl -M
La liste doit contenir les lignes suivantes
* ''headers_module''
* ''rewrite_module''
* ''ssl_module''
Si ce n'est pas le cas, activer les modules et redémarrer Apache :
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod headers
sudo systemctl restart apache2
==== 2. Suivre la procédure ====
* Aller sur [[https://certbot.eff.org/instructions]]
* Choisir **Apache** et **Ubuntu 20** (actuellement Ubuntu 22 n'est pas encore dans la liste)
* Une procédure détaillée s'affiche pour le système choisi
Résumé :
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Création du certificat :
sudo certbot certonly --apache
* Répondre aux questions posées (adresse email, read the terms, etc...)
* Choisir le(s) site(s) pour lequel on veut activer HTTPS
* Mettre un ou plusieurs numéros séparés par des virgules ou espaces
Tout se fait de façon automatique :
{{:apache:certbot-20220723.png|}}
==== 3. Configuration d'Apache ====
Pour l'instant j'ai un VirtualHost dont la configuration se
situe dans le fichier **/etc/apache2/sites-available/www.XXXXXXXX.be.conf**.
ServerName XXXXXXXX.be
ServerAlias www.XXXXXXXX.be
ServerAdmin XXXXXXXX@gmail.com
DocumentRoot /var/www/www.XXXXXXXX.be
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all denied
Require all granted
allow from all
ErrorLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/error.log
CustomLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/access.log combined
Modifier le contenu comme suit :
ServerName XXXXXXXX.be
ServerAlias www.XXXXXXXX.be
ServerAdmin XXXXXXXX@gmail.com
RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ServerName XXXXXXXX.be
ServerAlias www.XXXXXXXX.be
ServerAdmin XXXXXXXX@gmail.com
DocumentRoot /var/www/www.XXXXXXXX.be
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Require all denied
Require all granted
allow from all
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.XXXXXXXX.be/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.XXXXXXXX.be/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.XXXXXXXX.be/chain.pem
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCompression off
SSLOptions +StrictRequire
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/error.log
CustomLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/access.log combined
Tester la configuration :
sudo apachectl configtest
S'il répond ''Syntax OK'', tout va bien.
Si erreur ''Invalid command 'Header', ...'' cela signifie que le module
**Header** n'est pas activé.
sudo a2enmod headers
sudo systemctl restart apache2
==== 4. Renouvellement du certificat ====
Il n'y a plus de renouvellement automatique à faire car il y a une
tâche planifiée qui le fait avant l'expiration.
Pour vérifier que le renouvellement automatique fonctionne :
sudo certbot renew --dry-run
Le système fait une simulation de renouvellement et indique si
l'opération a réussi ou non.
==== 5. Liste des certificats présents ====
sudo certbot certificates
L'exemple ci-dessous montre deux certificats :
* **new.example.com** est encore valide 34 jours
* **old.example.com** est expiré
Found the following certs:
Certificate Name: old.example.com
Serial Number: 5b59ae037ffa3c78f3e38d53c8b5a3180a4
Key Type: RSA
Domains: old.example.com
Expiry Date: 2022-09-07 23:16:55+00:00 (INVALID: EXPIRED)
Certificate Path: /etc/letsencrypt/live/old.example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/old.example.com/privkey.pem
Certificate Name: new.example.com
Serial Number: 388460a774dd9e6f70c83eaebc3f2c0d4e2
Key Type: RSA
Domains: new.example.com
Expiry Date: 2022-11-20 07:47:09+00:00 (VALID: 34 days)
Certificate Path: /etc/letsencrypt/live/new.example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/new.example.com/privkey.pem
==== 6. Supprimer un certificat ====
sudo certbot delete --cert-name old.example.com