Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:comment_creer_un_certificat_ssl [Le 14/04/2014, 15:04] – [Introduction] 193.49.161.184tutoriel:comment_creer_un_certificat_ssl [Le 07/09/2026, 10:39] (Version actuelle) – début réécriture, à commencer par une explication sommaire | lire les recommandations d'édition SVP ! (pas de première personne) krodelabestiole
Ligne 1: Ligne 1:
-{{tag>dapper serveur sécurité tutoriel}} +{{tag>trusty serveur sécurité tutoriel}}
- +
-----+
  
 ====== Comment créer un certificat SSL ? ====== ====== Comment créer un certificat SSL ? ======
  
 +Un certificat [[wpfr>Transport_Layer_Security|SSL]] permet de garantir l'identité d'un serveur. Celui-ci est délivré par un organisme de confiance.\\
 +[[https://letsencrypt.org/fr/|Let's Encrypt]] fournit par exemple des certificats gratuits.
  
 +Ceci permet d'empêcher les attaques de type //[[wpfr>Attaque_de_l'homme_du_milieu|man-in-the-middle]]//, ou de se prévenir du //[[wpfr>Hameçonnage|phishing]]// (à condition de s'assurer de l'exactitude du [[:web#noom de domaine]] dans l'[[:web#URL]]).
  
-===== Introduction =====+Il existe plusieurs méthodes permettant d'installer un certificat. Certaines peuvent être automatisées -- dépendamment sur [[:web#serveur|serveur web]] utilisé -- voir par exemple [[https://traefik.io/traefik|Traefik]] avec [[:Docker]] -- ce qui simplifie grandement les opérations.
  
-Dans plusieurs documents du wiki, on aborde la question de la création de certificat SSL privé (c'est-à-dire qu'ils ne sont pas certifiés par une autorité indépendante).+Un certificat doit aussi être renouvelé régulièrement.
  
-Il existe beaucoup de sites expliquant comment créer un certificat SSL personnel. Voici une technique qui fonctionne mais dans laquelle je ne donne pas  de détails.+<note>On parle par habitude de certificat SSL alors qu'on utilise désormais [[wpfr>Transport_Layer_Security|TLS]] pour le chiffrement sur le [[:web]]</note>
  
 ===== Pré-requis ===== ===== Pré-requis =====
  
-Le paquet ''openssl'' doit être installé par la commande : +[[:deb#installer un paquet deb|Installer le paquet]] ''[[apt>openssl]]'', soit en ligne de commande\_
- +  sudo apt install openssl
-<code> +
-sudo apt-get install openssl +
-</code> +
  
 ===== Marche à suivre ===== ===== Marche à suivre =====
  
-Placez-vous dans le répertoire ''/etc/ssl'' et créez la clé :+==== Clef privée du serveur ====
  
 +Placez-vous dans le répertoire ''/etc/ssl'' et créez la clé :
 <code> <code>
 cd /etc/ssl cd /etc/ssl
Ligne 31: Ligne 29:
 </code> </code>
  
-Introduisez les informations relatives au certificatVeillez simplement à mettre le nom du serveur tel qu'il est appelé de l'extérieur dans le champ ''YOUR NAME'' (par exemple ''relay.ubuntu-fr.org'':+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  :
  
 <code> <code>
Ligne 37: Ligne 39:
 </code> </code>
  
-Enfin, générez ou récupérez le certificat final au format x509 suivant la méthode 1 ou 2 :+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é : 
 +<code> 
 +openssl req -text -noout -in server.csr 
 +</code> 
 +==== 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) :<code>   - certificat auto-signé pour 365 jours (1 an) :<code>
 sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt sudo openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
-</code> +</code>//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é tièrce, par exemple [[https://www.cacert.org|CACert]] : copier/coller la demande (le fichier server.csr) à l'autorité qui va générer le certificat à utiliser ([[https://www.cacert.org/account.php?id=10|ici pour cacert]]).+  - 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)
  
-//Remarque : ce certificat n'est authentifié par aucune autorité, vous aurez donc un message d'avertissement quand vous vous connectez au serveur. //+===== Usage avancé =====
  
-----+==== Usage non interactif ====
  
-// Contributeur 5: [[utilisateurs:Jeremy]] //+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"//
  
 +<note help>//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).</note>
 +
 +==== 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 :
 +<file>
 +[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
 +</file>
 +
 +Et ajouter les paramètres suivants à la commande openssl : //-config openssl_SAN.cnf -reqexts SAN//
 +
 +===== Voir aussi =====
 +
 +  * //[[wpfr>Transport_Layer_Security#Authentification_par_certificat_numérique|Authentification par certificat numérique]]// sur Wikipédia
 +  * //[[https://www.magdiblog.fr/divers/creer-une-passerelle-securisee-avec-un-raspberry-pi/|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...
 +  * **(//en//)** [[https://www.tty1.net/blog/2015/using-letsencrypt-in-manual-mode_en.html|Utilisation détaillée avec Let's Encrypt]]
 +
 +----
 +//[[:Contributeurs]] : [[:utilisateurs:Jeremy]], [[:utilisateurs:krodelabestiole]].//