{{tag>trusty serveur sécurité tutoriel}}
----
====== 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.
===== 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 :
* [[https://www.cacert.org|CACert]] : copier/coller la demande (le fichier server.csr) à l'autorité qui va signer le certificat à utiliser ([[https://www.cacert.org/account.php?id=10|ici pour cacert]]).
* [[https://letsencrypt.org/|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"//
//Domain Control Validated// indique simplement que seule la vérification du domaine est effectuée. Ce paramètre peut être omis. Il existe une vérification DV (celle indiquée) et EV, plus complète. Plus de détails sur [[https://certsimple.com/blog/are-ev-ssl-certificates-worth-it|ce blog]] (en).
==== 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 =====
* **(fr)** [[https://www.magdiblog.fr/divers/creer-une-passerelle-securisee-avec-un-raspberry-pi/|Qu'est ce qu'un certificat, comment créer une CA ainsi qu'un exemple d'authentification par certificat client]]
* **(en)** [[https://www.tty1.net/blog/2015/using-letsencrypt-in-manual-mode_en.html|Utilisation détaillée avec Let's Encrypt]]
----
// Contributeur 5: [[utilisateurs:Jeremy]] //