Selon les tags présents sur cette page, celle-ci n'a pas été vérifiée pour une des versions LTS supportées d'Ubuntu.
Comment créer un certificat SSL ?
Un certificat SSL permet de garantir l'identité d'un serveur. Celui-ci est délivré par un organisme de confiance.
Let's Encrypt fournit par exemple des certificats gratuits.
Ceci permet d'empêcher les attaques de type man-in-the-middle, ou de se prévenir du phishing (à condition de s'assurer de l'exactitude du noom de domaine dans l'URL).
Il existe plusieurs méthodes permettant d'installer un certificat. Certaines peuvent être automatisées – dépendamment sur serveur web utilisé – voir par exemple Traefik avec Docker – ce qui simplifie grandement les opérations.
Un certificat doit aussi être renouvelé régulièrement.
Pré-requis
Installer le paquet openssl, soit en ligne de commande :
sudo apt 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
Voir aussi
- Authentification par certificat numérique sur Wikipédia
- Créer une passerelle sécurisée avec un Raspberry Pi : qu'est ce qu'un certificat, comment créer une CA ainsi qu'un exemple d'authentification par certificat client…
