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 [2014/04/22 09:13] – [Visualiser les infos contenues dans un CSR] 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>
-==== Vérifier la concordance d'une clé et d'un CSR ==== 
  
-<code> +<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>
-~# openssl rsa -noout -modulus -in server.key |openssl md5 +
-XXXXXXXXXXXXXXXXXXXXXcfbf186e13f +
-~# 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 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 :
  
-Nous commençons par générer la bi-clé RSA, qui peut être protégée par une passphrasePour se faciliter la vie, on peut ne rien mettre pour la phrase de passeCeci nous évite de devoir la retaper à chaque redémarrage du serveur.+  * Copier le fichier de configuration //openssl.cnf// : <code>cp /etc/ssl/openssl.cnf /etc/ssl/private/openssl-domaine.tld.cnf</code> 
 +  * Modifier la copie : 
 +    * Dans ''%%[req]%%'' ajouter : <code ini>req_extensions = v3_req</code> 
 +    * Dans ''%%[v3_req]%%'' ajouter : <code ini>subjectAltName = @alt_names</code> 
 +    * Ajouter la section suivante : <code ini>[alt_names] 
 +DNS.1 = alt1.domain.tld 
 +DNS.2 = alt2.domain.tld 
 +DNS.3 = alt3.domain.tld</code> 
 +  * Générer ensuite la CSR normalement (commande //openssl req -new ~~~//) en ajoutant le paramètre //-config /etc/ssl/private/openssl-domaine.tld.cnf// 
 +  * Une fois généré, vous pourrez constater en affichant le contenu de la CSR, l'utilisation de l'extention //X509v3 Subject Alternative Name// : <code>Certificate Request: 
 +    Data: 
 +        Version: 0 (0x0) 
 +        Subject: C=FR, CN=domain.tld 
 +        Subject Public Key Info: 
 +            Public Key Algorithm: rsaEncryption 
 +                Public-Key: (2048 bit) 
 +                Modulus: 
 +                    [...] 
 +                Exponent: 65537 (0x10001) 
 +        Attributes: 
 +        Requested Extensions: 
 +            X509v3 Basic Constraints:  
 +                CA:FALSE 
 +            X509v3 Key Usage:  
 +                Digital Signature, Non Repudiation, Key Encipherment 
 +            X509v3 Subject Alternative Name:  
 +                DNS:alt1.domain.tld, DNS:alt3.domain.tld, DNS:alt3.domain.tld 
 +    Signature Algorithm: sha1WithRSAEncryption 
 +    [...]</code> 
 +==== Vérifier la concordance d'une clé, d'un CSR et d'un certificat ====
  
-<code>openssl genrsa -out server.key 1024</code>+  * clé privée : <code bash>openssl rsa -noout -modulus -in server.key |openssl md5</code> 
 +  * CSR : <code bash>openssl req -noout -modulus -in server.csr |openssl md5</code> 
 +  * certificat : <code bash>openssl x509 -noout -modulus -in server.crt |openssl md5</code>
  
-Nous générons ensuite le certificat autosigné +===== Génération d'un certificat SSL auto-signé =====
- +
-  openssl req -new -x509 -days 365 -key server.key -out server.crt+
  
-Dans les questions poséesil 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.+<note important>Privilégiez lorsque possible l'utilisation d'un certificat validepar exemple via [[informatique:securite:letsencrypt|Let's Encrypt]].</note>
  
-  * -x509 : génération d'un certificat autosignéet non d'une simple requête +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> 
-  * -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 anomaliePour 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.+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>
  
-**Pour vérifier le bon usage du certificat :**+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 x509 -in server.crt -text -noout+Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre le nom du serveur (FQDN).
  
 +**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 69: 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 79: 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/apache2/ssl/server.crt +<IfModule mod_ssl.c> 
-    SSLCertificateKeyFile /etc/apache2/ssl/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
 +</code>
  
-**NB :** un fichier .pem est la concaténation de la clef privée et du certificat :+<note tip>Pour créé le fichier //PEM//, concaténez la clef privée et le certificat : 
 +<code bash>cat /etc/ssl/private/server.key /etc/ssl/certs/server.crt > /etc/ssl/private/server.pem 
 +</code></note>
  
-  cat server.key apache.pem +Puis activer ce fichier de configuration : <code bash>a2enconf ssl 
-  cat server.crt >> apache.pem+service apache2 restart</code>
  
-**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 : +<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>
- +
-  SSLCertificateChainFile cachaine.txt+
  
 ==== 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 112: Ligne 148:
      ...      ...
   </VirtualHost>   </VirtualHost>
 +</code>
 +
 +===== Lister les ciphers supporté par un serveur =====
 +
 +**Script :**
 +<code bash>#!/bin/bash
 +
 +# OpenSSL requires the port number.
 +SERVER=$1
 +[ -z "$SERVER" -o "$SERVER" == "-h" ] && echo "Usage : $0 [server:port]" && exit 0
 +
 +echo -n "Obtaining cipher list from local $(openssl version)..."
 +ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')
 +
 +echo "Check cipher support on server $SERVER :"
 +for cipher in ${ciphers[@]}
 +do
 +        echo -n Testing $cipher...
 +        result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVER 2>&1)
 +        if [[ "$result" =~ ":error:" ]] ; then
 +                error=$(echo -n $result | cut -d':' -f6)
 +                echo NO \($error\)
 +        else
 +                if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher    :" ]] ; then
 +                        echo YES
 +                else
 +                        echo UNKNOWN RESPONSE
 +                        echo $result
 +                fi
 +        fi
 +done</code>
 +
 +**Usage :** <code># Usage : list_cipher [server:port]</code>
  • informatique/securite/manip_certificat_ssl.1398157994.txt.gz
  • Dernière modification : 2014/04/22 09:13
  • de bn8