Let’s Encrypt, certificats SSL gratuit pour tous !

Article concernant un acteur du web dont vous avez certainement entendu parler et qui met à mal les autorités de certification ancestrales : Let’s Encrypt.

 

I – Présentation

Fini les certificats auto signés, place maintenant à un joli cadenas vert, à l’absence d’alertes de sécurité, bref, à quelque chose de propre et fonctionnel avec un vrai certificat et qui plus est, gratuit !

En plus d’assurer une certaine sécurité dans vos échanges avec vos serveurs, avoir un certificat SSL améliorera le classement de votre site sur les moteurs de recherche.

Vous allez me dire, y’a forcement un point négatif dans ce truc ?

Et bien, a priori, le seul point négatif, c’est la durée  de validité des certificats, ceux ci étant valide pour trois mois. Mais pas de panique, ils se renouvellent en quelques commandes.

Pour avoir son propre certificat, il existe plusieurs « client ». CertBot, l’officiel de Let’s Encrypt, et bien d’autres (https://letsencrypt.org/docs/client-options/)

Personnellement, mon choix s’est porté sur Acme.sh, écrit en Bash. Simple, efficace, que demander de plus…

 

II – Installation

Pour l’installer, plusieurs solution la aussi (wget, curl, git…). Pour ma part, ce sera Git.

Du coup :

# apt-get install git

Puis, si vous êtes derrière un proxy :

# git config --global http.proxy http://user:pass@ipproxy:portproxy

Installons maintenant acme.sh :

# cd 
# mkdir sources
# cd sources/
# git clone https://github.com/Neilpang/acme.sh.git
# cd ./acme.sh
# ./acme.sh --install

Le polisson s’installera alors dans /root/.acme.sh/

 

III – Création de votre certificat.

Il existe ensuite plusieurs façons d’utiliser l’outil.

Dans tous les cas, il est important que votre domaine que vous souhaitez certifier soit bien enregistré dans les DNS.

 

A – Avec un serveur Web (Nginx, Apache)

Avant tout, assurez vous que votre serveur web est bien configuré (comprendre, le domaine existe dedans, par ex, dans Nginx, un bloc location contient bien server_name toto.debugo.fr ).

Pour ma part, je me sers de cette option sur mon reverse proxy, qui est LE point d’entrée de tout mes sites Webs, quelque soit la VM sur laquelle ils sont hébergés.

Il suffit alors de faire :

# acme.sh --issue -k 4096 -d toto.debugo.fr --nginx --log

En cas de besoin on peut forcer en rajoutant –force (si par ex, la date de renouvellement est loin et que vous avez quand même besoin de le refaire)

Si par la suite, vous souhaitez rajouter un autre domaine au même certificat (comme je disais, par exemple sur un reverse proxy qui gère plusieurs sites, dans quel cas, vous n’aurez alors qu’un seul certificat à gérer)

# acme.sh --issue -k 4096 -d toto.debugo.fr -d toto2.debugo.fr --nginx --log

Puis, quelques semaines plus tard :

# acme.sh --issue -k 4096 -d toto.debugo.fr -d toto2.debugo.fr -d toto3.debugo.fr --nginx --log

Etc, etc..

Et si vous êtes sur Apache, d’une, qu’attendez vous pour migrer vers Nginx, et de deux, en attendant d’effectuer cette migration salvatrice, remplacez –nginx par… –apache, c’est bien, vous suivez !

 

B – Mode Standalone

Le mode standalone sera utilisé sur un serveur ne disposant pas de serveur Web, par ex, un serveur de messagerie, un ftp…

Tout d’abord, petite dépendance à installer :

# apt-get install socat

Ensuite, il faut savoir que le mode standalone lance son propre serveur web (répondant alors sur le port 80). Plusieurs solutions sont possibles alors…
Soit on route le port 80 vers la machine en question, soit, et c’est mon cas, on se sert de notre Reverse Proxy.

En fait, je rajoute un nouveau server dans /etc/nginx/site-enabled/toto :

server {
     listen 80;
     server_name toto.debugo.fr;

    location / {
        proxy_pass http://IP_SERVEUR/;
    }
}

Où IP_SERVEUR est bien évidement l’IP du serveur ou se trouvera le client acme.sh.

On pense à relancer Nginx :

rev_prox# service nginx restart

Puis, très simplement, sur le serveur ou doit être installé le certificat :

# acme.sh --issue -k 4096 --standalone -d toto.debugo.fr --log

Normalement, tout devrait se faire sans encombre.

 

C – Autres

Il existe d’autre façons de faire (via DNS notamment… mais celle ci est bien pénible car le renouvellement automatique ne fonctionnera pas. Vous devrez refaire vos enregistrements DNS, etc…).

Je vous invite à lire la documentation de Acme.sh (lien plus bas.) si vous désirez en savoir plus.

 

IV – Installation de votre certificat

Maintenant, il vous faut copier les fichiers générés et les inclure dans vos différents fichiers de configuration. Je vous donne trois exemples : Nginx, Postfix/Dovecot, et ProFTP. En gros, seuls changent les fichiers nécessaires (tous ne le sont pas en fonction des serveurs) et bien évidement, la commande pour redémarrer les serveurs.

Tout d’abord, nous allons créer un répertoire pour stocker nos fichiers :

# cd /etc/ssl/private
# mkdir debugo.fr

 

A – Nginx

On lance la commande qui va installer les fichiers nécessaires, puis relancer Nginx :

# acme.sh --installcert -d toto.debugo.fr -d toto2.debugo.fr --keypath /etc/ssl/private/debugo.fr/key.pem --fullchainpath /etc/ssl/private/debugo.fr/fullcert.pem --reloadcmd "service nginx force-reload"

Création du « Diffie-Hellman parameter » :

# openssl dhparam -out /etc/ssl/private/debugo.fr/dhparam.pem 4096

Puis dans le fichier /etc/nginx/nginx.conf :

ssl_certificate /etc/ssl/private/debugo.fr/fullcert.pem;
ssl_certificate_key /etc/ssl/private/debugo.fr/key.pem;
ssl_trusted_certificate /etc/ssl/private/debugo.fr/fullcert.pem;
#ssl_protocols TLSv1.2 TLSv1.1 TLSv1; # Score=95
ssl_protocols TLSv1.2; # Score=100
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/private/debugo.fr/dhparam.pem;
ssl_ecdh_curve secp384r1;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=31536000";

Vous remarquerez que j’en profite pour vous donner quelques réglages qui devraient vous permettre d’obtenir un beau A+ sur https://www.ssllabs.com !

B – Postfix et Dovecot

De façon presque similaire :

# acme.sh --installcert -d toto.debugo.fr --cert-file /etc/ssl/private/debugo.fr/cert.pem --key-file /etc/ssl/private/debugo.fr/key.pem --ca-file /etc/ssl/private/debugo.fr/ca.pem --fullchain-file /etc/ssl/private/debugo.fr/fullcert.pem --reloadCmd 'service postfix reload && service dovecot reload'

Ensuite, pour Postfix, dans le fichier /etc/postfix/main.cf :

smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/key.pem
smtpd_tls_cert_file = /etc/postfix/ssl/cert.pem
smtpd_tls_CAfile = /etc/postfix/ssl/fullcert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_tls_session_cache
smtpd_tls_protocols = !SSLv2,!SSLv3

Et pour Dovecot, dans le fichier /etc/dovecot/dovecot.conf :

ssl_protocols = !SSLv2 !SSLv3
ssl_ca = </etc/ssl/private/debugo.fr/ca.pem
ssl_cert = </etc/ssl/private/debugo.fr/cert.pem
ssl_key = </etc/ssl/private/debugo.fr/key.pem
ssl_verify_client_cert = yes
ssl = required

 

C – Proftpd

Toujours le même principe…

# acme.sh --installcert -d toto.debugo.fr --cert-file /etc/ssl/private/debugo.fr/cert.pem --key-file /etc/ssl/private/debugo.fr/key.pem --fullchain-file /etc/ssl/private/debugo.fr/fullcert.pem --reloadCmd 'service proftp reload'

Et dans le fichier /etc/proftpd/tls.conf, rajoutez donc :

<IfModule mod_tls.c>
 TLSEngine on
 TLSLog /var/log/proftpd/tls.log
 TLSProtocol TLSv1
 TLSRSACertificateFile /etc/ssl/private/debugo.fr/cert.pem
 TLSRSACertificateKeyFile /etc/ssl/private/debugo.fr/key.pem
 TLSCACertificateFile /etc/ssl/private/debugo.fr/fullcert.pem
 TLSRequired on
 TLSOptions NoSessionReuseRequired
</IfModule>

 

V – Renouvellement

Pour le renouvellement, il n’y a normalement rien à faire, une tache cron ayant été rajoutée lors de la génération du certificat.

Mais bon, au cas où :

# acme.sh --renew -d toto.debugo.fr -d toto2.debugo.fr --log --force

Du coup, le certificat sera renouvelé pour 90 jours, les fichiers copiés où il faut (identique à votre premier lancement de acme.sh –installcert) et le(s) service(s) également redémarrés.

 

VI – Ressources

Site Web de Let’s Encrypt : https://letsencrypt.org/

GitHub de Acme.sh : https://github.com/Neilpang/acme.sh/

 

 

Add a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *