Faire un certificat ssl en ECDSA (P-384)

Dans ce tutoriel nous allons procéder à une installation d’un certificat ssl en ECDSA (P-384) qui repose sur la cryptographie en courbes elliptiques. Pour ce faire, nous allons commencer par installer certbot si se n’est pas encore fait.

sudo apt update && sudo apt install certbot

Une fois fait, nous nous plaçons dans le dossier de départ.

sudo mkdir -p /etc/letsencrypt/live/domain.tld && cd /etc/letsencrypt/live/domain.tld

domain.tld sera le nom de domaine utilisé pour ce tutoriel.

Maintenant on génére la clé privée P-384

sudo openssl ecparam -genkey -name secp384r1 > privkey.pem

Ensuite nous allons modifier notre configuration openssl pour un meilleur chiffrement et de façon à mieux gérer nos sous domaines ce qui fera un seul certificat pour plusieurs domaines.

donc on va l’éditer avec sudo nano /etc/ssl/openssl.cnf et juste en dessous de :

# To use this configuration file with the "-extfile" option of the
# "openssl x509" utility, name here the section containing the
# X.509v3 extensions to use:
# extensions        = 
# (Alternatively, use a configuration file that has only
# X.509v3 extensions in its main [= default] section.)

On va venir placer :

openssl_conf = default_conf[default_conf]

ssl_conf = ssl_sect[ssl_sect]
system_default = system_default_sect[system_default_sect]

Ciphersuites = TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384   Ensuite décommentez req_extensions = v3_req

Dans la section [ v3_req ] Vous ajouterez une nouvelle ligne :

subjectAltName = @alt_names

Et tout à la fin du fichier vous ajouterez

[ alt_names ] 

Et c’est ici que vous indiquerez les domaines à utiliser en l’ai mettant juste en dessous:

DNS.1 = domain.tld
DNS.2 = sub_domain.tld

Vous remplacerez évidement domain.tld par votre nom de domaine, de même pour les sous domaines, vous pouvez en ajouter autant que vous voulez. Ensuite vous pouvez enregistrer le fichier, et nous allons générer le CSR avec :

openssl req -new -sha256 -key privkey.pem -out csr.der -config /etc/ssl/openssl.cnf

Vous pouvez rentrer les informations mais laissez Common Name vide, et ne protégez pas avec un mot de passe.

Et normalement, vous devrez avoir un privkey.pem ainsi qu’un csr.der dans /etc/letsencrypt/live/domain.tld/

Enfin il ne reste plus qu’à faire le certificat avec certbot :

sudo  certbot certonly --standalone --agree-tos -m admin@domain.tld --csr  /etc/letsencrypt/live/domain.tld/csr.der --cert-path  /etc/letsencrypt/live/domain.tld/cert.pem --chain-path  /etc/letsencrypt/live/domain.tld/chain.pem --fullchain-path  /etc/letsencrypt/live/domain.tld/fullchain.pem

Maintenant on va creer un script de renouvelement du certificat.

Creez un dossier backup dans /etc/letsencrypt/live/domain.tld/

Ensuite vous allez creer un fichier certrenew.sh dans /root et dans ce fichier vous mettrez ceci en remplaçant domain.tld par votre nom de domaine et nginx par apache2 si vous utilisez apache2 au lieu de nginx :

#!/bin/sh
mv /etc/letsencrypt/live/domain.tld/cert.pem /etc/letsencrypt/live/domain.tld/backup/$(date +%Y-%m-%d)_cert_ecdsa.pem
mv /etc/letsencrypt/live/domain.tld/fullchain.pem /etc/letsencrypt/live/domain.tld/backup/$(date +%Y-%m-%d)_fullchain_ecdsa.pem
mv /etc/letsencrypt/live/domain.tld/chain.pem /etc/letsencrypt/live/domain.tld/backup/$(date +%Y-%m-%d)_chain_ecdsa.pem

systemctl stop nginx

certbot  certonly --standalone --agree-tos -m admin@domain.tld --csr  /etc/letsencrypt/live/domain.tld/csr.der --cert-path  /etc/letsencrypt/live/domain.tld/cert.pem --chain-path  /etc/letsencrypt/live/domain.tld/chain.pem --fullchain-path  /etc/letsencrypt/live/domain.tld/fullchain.pem

systemctl start nginx

On rend le fichier exécutable :

sudo chmod +x /root/certrenew.sh

Et maintenant nous pouvons faire une tache cron avec la commande sudo crontab -e et vous mettrez :

0 2 1 */2 * sh /root/certrenew.sh

Et voilà, et vous avez maintenant le cert.pem, le chain.pem, le fullchain.pem ainsi que le privkey.pem, un certificat avec renouvelement automatique.

Un petit clin d’œil de remerciement à Baba Orhum pour avoir aidé à faire ce tutoriel !

Leave a Reply

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