Automatiser Let's Encrypt sur un serveur Cloud avec acme.sh

Testez-le maintenant pour 1 euro seulement !
Vous avez de grands projets d’hébergement avec beaucoup de ressources ? Avec le CloudServer (VPS) de hosting.fr, ce n’est pas un problème. Grâce à notre vaste gamme d’outils d’hébergement, vous bénéficiez d’une liberté absolue. Bien entendu, vous pouvez choisir librement le système d’exploitation en appuyant sur un bouton.
Réserver un serveur cloud maintenant

L’autorité de certification Let’s Encrypt offre la possibilité d’obtenir des certificats TLS/SSL gratuitement et automatiquement pour les serveurs. Un inconvénient de Let’s Encrypt est la durée de validité relativement courte des certificats. Cet inconvénient peut être compensé par l’utilisation d’un logiciel qui renouvelle automatiquement les certificats sur le serveur. Un logiciel approprié pour cela est acme.sh. Dans cet article, nous montrons, à titre d’exemple, comment configurer acme.sh sur un serveur Cloud ###COMPANY-NAME### en combinaison avec Apache ou Nginx en tant que serveur web. acme.sh fonctionne avec des outils système Linux standard et est essentiellement un script Shell. En alternative à acme.sh, il existe “certbot”, qui nécessite Python mais offre plus de confort. Dans cet article séparé est décrite l’installation de certbot.

Conditions préalables

  • Vous disposez d’un serveur Cloud hosting.fr ayant une entrée DNS valide, par exemple mustermann-domain.de.

  • Le système d’exploitation du serveur est une version récente de Debian ou Ubuntu.

Installation d’Apache ou de Nginx

Dans ce guide, vous pouvez utiliser soit Apache, soit Nginx comme serveur web. Si vous devez utiliser Apache, veuillez l’installer avec les commandes suivantes, si cela n’est pas déjà fait :

apt update
apt install apache2

Pour Nginx, remplacez le package apache2 par le package nginx.

Pour que le serveur soit accessible depuis Internet, les ports 80 et 443 doivent être ouverts dans le pare-feu.

Installation d’acme.sh

Le script acme.sh peut être installé avec la commande suivante :

curl https://get.acme.sh | sh

Cela nécessite des droits root si vous souhaitez utiliser les autres commandes proposées dans ce guide. Après l’exécution de la commande, veuillez redémarrer votre shell actuel. Si vous utilisez bash, tapez bash. Si vous utilisez zsh, tapez zsh. Ensuite, la commande acme.sh sera disponible dans votre shell par défaut.

Un exemple de configuration pour Apache

Pour demander un certificat, la commande suivante peut être utilisée en mode Apache :

acme.sh --issue --apache -d mustermann-domain.de

Le paramètre -d spécifie le nom de domaine pour lequel vous souhaitez demander un certificat. Il est également possible de spécifier plusieurs domaines avec plusieurs paramètres -d. Les certificats reçus seront déposés dans le répertoire personnel de l’utilisateur courant sous ~/.acme.sh/ dans un sous-répertoire dédié au domaine respectif.

Un répertoire doit être créé où les certificats pour Apache seront stockés, par exemple :

mkdir /etc/apache2/ssl/

Ensuite, vous pouvez installer les certificats dans le nouveau répertoire avec acme.sh :

acme.sh --install-cert -d mustermann-domain.de \
--cert-file /etc/apache2/ssl/mustermann-domain.de-cert.pem \
--key-file /etc/apache2/ssl/mustermann-domain.de-key.pem \
--fullchain-file /etc/apache2/ssl/letsencrypt.pem \
--reloadcmd "systemctl reload apache2"

Ensuite, la configuration du serveur web Apache doit être modifiée pour qu’elle utilise les certificats. Pour cela, veuillez supprimer tous les fichiers et liens symboliques dans le répertoire /etc/apache2/sites-enabled/ pour une installation Debian fraîche :

rm /etc/apache2/sites-enabled/*

Vous pouvez ensuite créer le fichier /etc/apache/sites-available/mustermann.conf avec le contenu suivant :

# cette configuration nécessite mod_ssl, mod_socache_shmcb, mod_rewrite et mod_headers
<VirtualHost *:80>
    RewriteEngine On
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on

    SSLCertificateFile      /etc/apache2/ssl/mustermann-domain.de-cert.pem
    SSLCertificateKeyFile   /etc/apache2/ssl/mustermann-domain.de-key.pem
    SSLCertificateChainFile /etc/apache2/ssl/letsencrypt.pem

    # activer HTTP/2, si disponible
    Protocols h2 http/1.1

    # HTTP Strict Transport Security (mod_headers est requis) (63072000 secondes)
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

# configuration intermédiaire, ajustez selon vos besoins
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)"

Pour cette configuration, le module headers dans Apache est nécessaire. Celui-ci peut être activé avec la commande

a2enmod ssl socache_shmcb rewrite headers

La nouvelle configuration doit être activée dans Apache avec la commande suivante :

a2ensite mustermann

Un exemple de configuration pour nginx

Pour demander un certificat en utilisant le serveur web nginx, vous pouvez utiliser la commande suivante, analogue à Apache :

acme.sh --issue --nginx -d mustermann-domain.de

Un répertoire doit être créé où les certificats pour Nginx seront stockés, par exemple :

mkdir /etc/nginx/ssl/

Ensuite, vous pouvez installer les certificats dans le nouveau répertoire avec acme.sh :

acme.sh --install-cert -d mustermann-domain.de \
--cert-file /etc/nginx/ssl/mustermann-domain.de-cert.pem \
--key-file /etc/nginx/ssl/mustermann-domain.de-key.pem \
--fullchain-file /etc/nginx/ssl/letsencrypt.pem \
--reloadcmd "systemctl reload nginx"

Ensuite, la configuration de nginx doit être ajustée pour utiliser les certificats demandés. Pour cela, veuillez supprimer tous les fichiers et liens symboliques dans /etc/nginx/sites-enabled pour une installation Debian fraîche :

rm /etc/nginx/sites-enabled/*

Créez ensuite le fichier /etc/nginx/sites-available/mustermann.conf. Une version simple pourrait ressembler à cela :

server {

        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html;

        return 301 https://$host$request_uri;

}

server {

        listen                  443 ssl http2;
        listen                  [::]:443 ssl http2;

        root                    /var/www/html;

        ssl_certificate         /etc/apache2/ssl/letsencrypt.pem;
        ssl_certificate_key     /etc/nginx/ssl/mustermann-domain.de-key.pem;

        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;  # environ 40000 sessions
        ssl_session_tickets off;

        ssl_protocols           TLSv1.2 TLSv1.3;
        ssl_ciphers             ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;

        add_header              Strict-Transport-Security "max-age=63072000; includeSubdomains;";

        ssl_stapling on;
        ssl_stapling_verify on;

}

Créez ensuite un lien symbolique vers le fichier de configuration dans le répertoire /etc/nginx/sites-enabled :

cd /etc/nginx/sites-enabled/
ln -s ../sites-available/mustermann.conf

Enfin, redémarrez nginx pour activer la configuration :

systemctl restart nginx.service

Test

Pour tester les certificats configurés dans les serveurs web, vous pouvez utiliser le test Qualys SSL Labs. Un score de “A+” doit être atteint.

Les certificats Let’s Encrypt sont valables 90 jours. Les certificats seront automatiquement renouvelés par acme.sh tous les 60 jours. Nous recommandons de le vérifier au moins une fois tous les 60 jours.

Références

N'hésitez pas à vous inscrire à notre newsletter



Nous vous remercions de votre inscription à la newsletter hosting.fr.
Certificats SSL Let's Encrypt acme.sh Apache Nginx