Outils pour utilisateurs

Outils du site


apache:activer_https_avec_lets_encrypt_ubuntu2204

Activer HTTPS avec Let's Encrypt - Ubuntu 22.04

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

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

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.

/etc/apache2/sites-available/www.XXXXXXXX.be.conf
<VirtualHost *:80>
    ServerName XXXXXXXX.be
    ServerAlias www.XXXXXXXX.be
 
    ServerAdmin XXXXXXXX@gmail.com
 
    DocumentRoot /var/www/www.XXXXXXXX.be
    <Directory /var/www/www.XXXXXXXX.be>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Require all denied
        Require all granted
        allow from all
    </Directory>
 
    ErrorLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/error.log
    CustomLog ${APACHE_LOG_DIR}/www.XXXXXXXX.be/access.log combined
</VirtualHost>

Modifier le contenu comme suit :

/etc/apache2/sites-available/www.XXXXXXXX.be.conf
<VirtualHost *:80>
    ServerName XXXXXXXX.be
    ServerAlias www.XXXXXXXX.be
 
    ServerAdmin XXXXXXXX@gmail.com
 
    RewriteEngine on
    RewriteCond %{HTTPS} !on
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
 
<VirtualHost *:443>
    ServerName XXXXXXXX.be
    ServerAlias www.XXXXXXXX.be
 
    ServerAdmin XXXXXXXX@gmail.com
 
    DocumentRoot /var/www/www.XXXXXXXX.be
    <Directory /var/www/www.XXXXXXXX.be>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Require all denied
        Require all granted
        allow from all
    </Directory>
 
    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
</VirtualHost>

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
apache/activer_https_avec_lets_encrypt_ubuntu2204.txt · Dernière modification: 2022/10/16 13:42 par marclebrun