informatique:securite:manip_certificat_ssl

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édentes Révision précédente
Prochaine révision
Révision précédente
informatique:securite:manip_certificat_ssl [2016/01/12 11:20] – [Activation du SSL sur un VirtualHost] bn8informatique:securite:manip_certificat_ssl [2024/03/01 17:12] (Version actuelle) – [Extraire les certificats d'un fichier PFX] bn8
Ligne 5: Ligne 5:
 ==== Version simple ==== ==== Version simple ====
  
-  openssl req -newkey rsa:2048 -subj /CN=example.com -nodes -keyout example.com.key -out example.com.csr+<code bash>openssl req -newkey rsa:2048 -subj /CN=example.com -nodes -keyout example.com.key -out example.com.csr</code>
  
 ou ou
- +<code bash>CN="domain.tld" 
-  CN="domain.tld" +FILE=cert-domain.tld 
-  FILE=cert-domain.tld +openssl req -newkey rsa:2048 -subj /CN=$CN -nodes -keyout $FILE.key -out $FILE.csr</code>
-  openssl req -newkey rsa:2048 -subj /CN=$CN -nodes -keyout $FILE.key -out $FILE.csr+
  
 ==== Version complète ==== ==== Version complète ====
  
-  CN="domain.tld" +<code bash> 
-  FILE=cert-domain.tld +CN="domain.tld" 
-  STATE=My State +FILE=cert-domain.tld 
-  VILLE=My City +STATE=My State 
-  PAYS=FR +VILLE=My City 
-  ORGA=My Company +PAYS=FR 
-  ORGA_UNIT=My Unit +ORGA=My Company 
-  openssl req -new -newkey rsa:2048 -nodes -out $FILE.csr -keyout $FILE.key -subj "/C=$PAYS/ST=$STATE/L=$VILLE/O=$ORGA/OU=$ORGA_UNIT/CN=$CN"+ORGA_UNIT=My Unit 
 +openssl req -new -newkey rsa:2048 -nodes -out $FILE.csr -keyout $FILE.key -subj "/C=$PAYS/ST=$STATE/L=$VILLE/O=$ORGA/OU=$ORGA_UNIT/CN=$CN"</code>
  
  
 <note>Pour un certificat wildcard, utiliser en //CN// //*.domain.tld//.</note> <note>Pour un certificat wildcard, utiliser en //CN// //*.domain.tld//.</note>
  
-=== Génération d'un CSR multi-domaine ===+<note tip>Pour voir les informations dans un fichier CSR, utiliser la commande suivante : <code bash>openssl req -noout -text -in example.com.csr</code></note> 
 + 
 +==== Génération d'un CSR multi-domaine ====
  
 Pour un certificat multi-domaine, c'est à dire incluant l’extension //subjectAltName// permetant la validité du certificat pour un nom de domaine principale ainsi que un ou plusieurs nom de domaine alternatif, voilà comment procéder : Pour un certificat multi-domaine, c'est à dire incluant l’extension //subjectAltName// permetant la validité du certificat pour un nom de domaine principale ainsi que un ou plusieurs nom de domaine alternatif, voilà comment procéder :
Ligne 33: Ligne 35:
   * Copier le fichier de configuration //openssl.cnf// : <code>cp /etc/ssl/openssl.cnf /etc/ssl/private/openssl-domaine.tld.cnf</code>   * Copier le fichier de configuration //openssl.cnf// : <code>cp /etc/ssl/openssl.cnf /etc/ssl/private/openssl-domaine.tld.cnf</code>
   * Modifier la copie :   * Modifier la copie :
-    * Dans //[req]]// ajouter : <code>req_extensions = v3_req</code> +    * Dans ''%%[req]%%'' ajouter : <code ini>req_extensions = v3_req</code> 
-    * Dans //[v3_req]// ajouter : <code>subjectAltName = @alt_names</code> +    * Dans ''%%[v3_req]%%'' ajouter : <code ini>subjectAltName = @alt_names</code> 
-    * Ajouter la section suivante : <code>[alt_names]+    * Ajouter la section suivante : <code ini>[alt_names]
 DNS.1 = alt1.domain.tld DNS.1 = alt1.domain.tld
 DNS.2 = alt2.domain.tld DNS.2 = alt2.domain.tld
Ligne 60: Ligne 62:
     Signature Algorithm: sha1WithRSAEncryption     Signature Algorithm: sha1WithRSAEncryption
     [...]</code>     [...]</code>
-==== Vérifier la concordance d'une clé et d'un CSR ====+==== Vérifier la concordance d'une cléd'un CSR et d'un certificat ====
  
-<code> +  * clé privée : <code bash>openssl rsa -noout -modulus -in server.key |openssl md5</code> 
-~# openssl rsa -noout -modulus -in server.key |openssl md5 +  * CSR : <code bash>openssl req -noout -modulus -in server.csr |openssl md5</code> 
-XXXXXXXXXXXXXXXXXXXXXcfbf186e13f +  * certificat : <code bash>openssl x509 -noout -modulus -in server.crt |openssl md5</code>
-~# openssl req -noout -modulus -in server.csr |openssl md5 +
-XXXXXXXXXXXXXXXXXXXXXcfbf186e13f +
-</code>+
  
 ===== Génération d'un certificat SSL auto-signé ===== ===== Génération d'un certificat SSL auto-signé =====
  
 +<note important>Privilégiez lorsque possible l'utilisation d'un certificat valide, par exemple via [[informatique:securite:letsencrypt|Let's Encrypt]].</note>
  
-Nous commençons par générer la bi-clé RSA, qui peut être protégée par une passphrase. Pour se faciliter la vieon peut ne rien mettre pour la phrase de passeCeci nous évite de devoir la retaper à chaque redémarrage du serveur.+Pour faciliter la suitedéclarons une variable d'environnement pour le nom de domaine pour lequel nous devons générer ce certificat : <code bash>export FQDN=test.example.com</code> 
  
-<code>openssl genrsa -out server.key 1024</code>+Générerons ensuite la clé //RSA// : <code bash>openssl genrsa -out /etc/ssl/private/${FQDN}.key 4096 
 +chown root:ssl-cert /etc/ssl/private/${FQDN}.key 
 +chmod 640 /etc/ssl/private/${FQDN}.key</code>
  
-Nous générons ensuite le certificat autosigné+Générons ensuite le certificat autosigné : <code bash>openssl req -new -x509 -days 3650 -key /etc/ssl/private/${FQDN}.key -out /etc/ssl/certs/${FQDN}.crt 
 +chmod 644 /etc/ssl/certs/${FQDN}.crt</code>
  
-  openssl req -new -x509 -days 365 -key server.key -out server.crt +Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre le nom du serveur (FQDN).
- +
-Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre le nom du serveur (FQDN). Sinon, nous aurons un message comme quoi le nom du propriétaire du certificat et du site ne correspond pas. +
- +
-  * -x509 : génération d'un certificat autosigné, et non d'une simple requête +
-  * -days 365 : le certificat est valable 365 jours +
-  * -key server.key : la clé publique est extraite de la bi-clé précédente +
-  * -out server.crt : le certificat est copié +
- +
-Le certificat n'est pas signé par une autorité de certification (type verisign). Ainsi, lors de son utilisation, le browser affichera une anomalie. Pour information, sur verisign.fr, un certificat 40 bits coûte 450€ par an et un certificat pro de 128 bits coûte 1150€ par an. +
- +
-**Pour vérifier le bon usage du certificat :** +
- +
-  openssl x509 -in server.crt -text -noout+
  
 +**Paramètres :**
 +  * **''-x509'' :** génération d'un certificat auto-signé, et non d'une //CSR//
 +  * **''-days 3650'' :** le certificat sera valable 3650 jours
 ===== Voir les informations contenues dans un certificat SSL ===== ===== Voir les informations contenues dans un certificat SSL =====
  
-Pour un CRT : <code>openssl x509 -noout -text -in server.pem</code>+Pour un CRT : <code bash>openssl x509 -noout -text -in server.pem</code>
  
-Pour un CSR : <code>openssl req -noout -text -in server.csr</code>+Pour un CSR : <code bash>openssl req -noout -text -in server.csr</code>
  
 Pour un P12 : le convertir en PEM d'abord (cf. plus bas) Pour un P12 : le convertir en PEM d'abord (cf. plus bas)
Ligne 103: Ligne 96:
 ===== Convertir un P12 en PEM ===== ===== Convertir un P12 en PEM =====
  
-<code>openssl pkcs12 -out file-out.pem -in file-in.p12</code>+<code bash>openssl pkcs12 -out file-out.pem -in file-in.p12</code>
  
 +===== Extraire les certificats d'un fichier PFX =====
 +  * clé privée : <code bash>openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key</code>
 +  * certificat : <code bash>openssl pkcs12 -in server.pfx -clcerts -nokeys -out server.crt</code>
  
 +<note tip>Si vous rencontrez une erreur du type de celle ci-dessous, ajouter le paramètre ''-legacy'' aux commandes openssl: <code>4037E9E48B7F0000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:../crypto/evp/evp_fetch.c:373:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()</code></note>
 ===== Utilisation d'un certificat SSL par Apache ===== ===== Utilisation d'un certificat SSL par Apache =====
  
Ligne 113: Ligne 110:
 ==== Configuration générale du module SSL d'Apache ==== ==== Configuration générale du module SSL d'Apache ====
  
-Créer le fichier /etc/apache2/conf.d/ssl :+Créer le fichier ///etc/apache2/conf-available/ssl.conf// :
  
-  <IfModule mod_ssl.c> +<code apache> 
-    SSLCertificateFile    /etc/ssl/certs/server.crt +<IfModule mod_ssl.c> 
-    SSLCertificateKeyFile /etc/ssl/private/server.key +  SSLCertificateFile    /etc/ssl/certs/server.crt 
-  </IfModule>+  SSLCertificateKeyFile /etc/ssl/private/server.key 
 +</IfModule
 +</code>
  
-ou +ou avec un seul fichier contenant la clé et le certificat :
  
-  <IfModule mod_ssl.c> +<code apache> 
-    SSLCertificateKeyFile /etc/apache2/ssl/server.pem +<IfModule mod_ssl.c> 
-  </IfModule> +  SSLCertificateKeyFile /etc/ssl/private/server.pem 
- +</IfModule> 
-**NB :** un fichier .pem est la concaténation de la clef privée et du certificat :+</code>
  
-  cat server.key > apache.pem +<note tip>Pour créé le fichier //PEM//, concaténez la clef privée et le certificat : 
-  cat server.crt >> apache.pem+<code bash>cat /etc/ssl/private/server.key /etc/ssl/certs/server.crt > /etc/ssl/private/server.pem 
 +</code></note>
  
-**NB2 :** dans le cas de l'utilisation d'une clef certifié par une autorité fille d'une Autorité de certification connue des navigateurs, il faut ajouté une directive pour indiqué la **ligné** des certificats :+Puis activer ce fichier de configuration <code bash>a2enconf ssl 
 +service apache2 restart</code>
  
-  SSLCertificateChainFile cachaine.txt+<note tip>Dans le cas de l'utilisation d'une clef certifiée par une autorité fille d'une autorité de certification connue des navigateurs, il faut ajouter une directive pour indiqué la **ligné** des certificats (appelée //chaîne de certification//) : <code bash>SSLCertificateChainFile cachaine.txt</code></note>
  
 ==== Activation du module SSL ==== ==== Activation du module SSL ====
-  a2enmod ssl+<code bash>a2enmod ssl</code>
  
 ==== Activation du SSL sur un VirtualHost ==== ==== Activation du SSL sur un VirtualHost ====
 Dans le fichier de définition du //VirtualHost// : Dans le fichier de définition du //VirtualHost// :
  
 +<code apache>
   <VirtualHost *:443>   <VirtualHost *:443>
      ...      ...
Ligne 146: Ligne 148:
      ...      ...
   </VirtualHost>   </VirtualHost>
-  +</code> 
 ===== Lister les ciphers supporté par un serveur ===== ===== Lister les ciphers supporté par un serveur =====
  
  • informatique/securite/manip_certificat_ssl.1452597614.txt.gz
  • Dernière modification : 2016/01/12 11:20
  • de bn8