Comment créer un certificat SSL ?
Introduction
Dans plusieurs documents du wiki, on aborde la question de la création de certificat SSL.
Il existe beaucoup de sites expliquant comment créer un certificat SSL. Voici une technique qui fonctionne mais dans laquelle je ne donne pas de détails. dsds
Pré-requis
Le paquet openssl
doit être installé par la commande :
sudo apt-get install openssl
Marche à suivre
Clef privée du serveur
Placez-vous dans le répertoire /etc/ssl
et créez la clé :
cd /etc/ssl sudo openssl genrsa -out server.key 2048
Cette commande va créer la clé privée avec l'algorithme RSA 2048 bits.
Demande de signature du certificat
Ensuite il faut générer un fichier de « demande de signature de certificat », en anglais CSR : Certificate Signing Request :
sudo openssl req -new -key server.key -out server.csr
Vous allez devoir répondre à un certain nombre de questions. Veillez surtout à mettre le nom du serveur tel qu'il est appelé de l'extérieur dans le champ « Common Name » (par exemple : "www.example.com").
Optionnel : pour visualiser le contenu du fichier généré :
openssl req -text -noout -in server.csr
Signature du certificat
Enfin, générez ou récupérez le certificat signé au format x509 suivant la méthode 1 ou 2 :
- certificat auto-signé pour 365 jours (1 an) :
sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Remarque : ce certificat n'est authentifié par aucune autorité, vous aurez donc un message d'avertissement quand vous vous connectez au serveur.
- certificat signé par une autorité tierce, par exemple :
- CACert : copier/coller la demande (le fichier server.csr) à l'autorité qui va signer le certificat à utiliser (ici pour cacert).
- Let's Encrypt, avec l'option –csr du client letsencrypt (CSR au format DER : option -outform der pour openssl)
Usage avancé
Usage non interactif
Pour éviter de répondre aux questions de la localisation jusqu'au domaine, il est possible de passer l'argument subject à la commande openssl. Ajouter le paramètre : -subj "/OU=Domain Control Validated/CN=exemple.fr"
Paramétrage fin de la CSR
Les CSR permettent de valider plusieurs domaines avec un même certificat. Pour l'utiliser, créer un fichier openssl_SAN.cnf comme-suit :
[req] req_extensions = v3_req distinguished_name = req_distinguished_name [req_distinguished_name] [v3_req] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment [SAN] subjectAltName=DNS:exemple.fr,DNS:www.exemple.fr
Et ajouter les paramètres suivants à la commande openssl : -config openssl_SAN.cnf -reqexts SAN