Différences
Ci-dessous, les différences entre deux révisions de la page.
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:11] – [Manipulation de certificats SSL] bn8 | informatique:securite:manip_certificat_ssl [2025/01/10 08:53] (Version actuelle) – [Activation du SSL sur un VirtualHost] bn8 | ||
---|---|---|---|
Ligne 5: | Ligne 5: | ||
==== Version simple ==== | ==== Version simple ==== | ||
- | | + | <code bash>openssl req -newkey rsa:2048 -subj / |
ou | ou | ||
- | + | <code bash>CN=" | |
- | | + | FILE=cert-domain.tld |
- | FILE=cert-domain.tld | + | openssl req -newkey rsa:2048 -subj /CN=$CN -nodes -keyout $FILE.key -out $FILE.csr</ |
- | openssl req -newkey rsa:2048 -subj /CN=$CN -nodes -keyout $FILE.key -out $FILE.csr | + | |
==== Version complète ==== | ==== Version complète ==== | ||
- | | + | <code bash> |
- | FILE=cert-domain.tld | + | CN=" |
- | 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 "/ | + | ORGA_UNIT=My Unit |
+ | openssl req -new -newkey rsa:2048 -nodes -out $FILE.csr -keyout $FILE.key -subj "/ | ||
- | ==== Visualiser les infos contenues dans un CSR ==== | + | < |
- | < | + | <note tip>Pour voir les informations dans un fichier CSR, utiliser la commande suivante : < |
- | ==== Vérifier la concordance d'une clé et d'un CSR ==== | + | ==== Génération |
- | < | + | Pour un certificat multi-domaine, c'est à dire incluant l’extension // |
- | ~# openssl rsa -noout -modulus -in server.key |openssl md5 | + | |
- | XXXXXXXXXXXXXXXXXXXXXcfbf186e13f | + | |
- | ~# openssl req -noout -modulus -in server.csr |openssl md5 | + | |
- | XXXXXXXXXXXXXXXXXXXXXcfbf186e13f | + | |
- | </code> | + | |
- | ===== Génération | + | * Copier le fichier de configuration // |
+ | * Modifier la copie : | ||
+ | * Dans '' | ||
+ | * Dans '' | ||
+ | * Ajouter la section suivante : <code ini> | ||
+ | DNS.1 = alt1.domain.tld | ||
+ | DNS.2 = alt2.domain.tld | ||
+ | DNS.3 = alt3.domain.tld</ | ||
+ | * Générer ensuite la CSR normalement (commande //openssl req -new ~~~//) en ajoutant le paramètre //-config / | ||
+ | * Une fois généré, vous pourrez constater en affichant le contenu de la CSR, l' | ||
+ | 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, | ||
+ | X509v3 Subject Alternative Name: | ||
+ | DNS: | ||
+ | Signature Algorithm: sha1WithRSAEncryption | ||
+ | [...]</ | ||
+ | ==== Vérifier la concordance d'une clé, d'un CSR et d'un certificat ==== | ||
+ | * clé privée : <code bash> | ||
+ | * CSR : <code bash> | ||
+ | * certificat : <code bash> | ||
- | Nous commençons par générer la bi-clé RSA, qui peut être protégée par une passphrase. Pour se faciliter la vie, on peut ne rien mettre pour la phrase de passe. Ceci nous évite de devoir la retaper à chaque redémarrage du serveur. | + | ===== Génération d'un certificat SSL auto-signé ===== |
- | <code>openssl genrsa -out server.key 1024</code> | + | <note important>Privilégiez lorsque possible l' |
- | Nous générons ensuite | + | Pour faciliter la suite, déclarons une variable d' |
- | | + | Générerons ensuite la clé //RSA// : <code bash>openssl |
+ | chown root:ssl-cert / | ||
+ | chmod 640 / | ||
- | Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre | + | Générons ensuite |
+ | chmod 644 / | ||
- | * -x509 : génération d'un certificat autosigné, et non d'une simple requête | + | Dans les questions posées, il faut faire attention au champ Common Name (eg, YOUR name) : Il faut mettre |
- | * -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 | + | |
- | + | ||
- | **Pour vérifier le bon usage du certificat :** | + | |
- | + | ||
- | openssl x509 -in server.crt -text -noout | + | |
+ | **Paramètres :** | ||
+ | * **'' | ||
+ | * **'' | ||
===== Voir les informations contenues dans un certificat SSL ===== | ===== Voir les informations contenues dans un certificat SSL ===== | ||
- | Pour un CRT : < | + | Pour un CRT : < |
- | Pour un CSR : < | + | Pour un CSR : < |
Pour un P12 : le convertir en PEM d' | Pour un P12 : le convertir en PEM d' | ||
Ligne 72: | Ligne 96: | ||
===== Convertir un P12 en PEM ===== | ===== Convertir un P12 en PEM ===== | ||
- | < | + | < |
+ | ===== Extraire les certificats d'un fichier PFX ===== | ||
+ | * clé privée : <code bash> | ||
+ | * certificat : <code bash> | ||
+ | <note tip>Si vous rencontrez une erreur du type de celle ci-dessous, ajouter le paramètre '' | ||
===== Utilisation d'un certificat SSL par Apache ===== | ===== Utilisation d'un certificat SSL par Apache ===== | ||
Ligne 82: | Ligne 110: | ||
==== Configuration générale du module SSL d' | ==== Configuration générale du module SSL d' | ||
- | Créer le fichier / | + | Créer le fichier |
- | | + | <code apache> |
- | SSLCertificateFile | + | < |
- | SSLCertificateKeyFile /etc/apache2/ | + | SSLCertificateFile |
- | </ | + | SSLCertificateKeyFile /etc/ssl/private/ |
+ | </ | ||
+ | </code> | ||
- | ou | + | ou avec un seul fichier contenant la clé et le certificat : |
- | | + | <code apache> |
- | SSLCertificateKeyFile /etc/apache2/ | + | < |
- | </ | + | SSLCertificateKeyFile /etc/ssl/private/ |
+ | </ | ||
+ | </code> | ||
- | **NB :** un fichier | + | <note tip>Pour créé le fichier |
+ | <code bash>cat / | ||
+ | </ | ||
- | cat server.key | + | Puis activer ce fichier de configuration : <code bash>a2enconf ssl |
- | cat server.crt | + | service apache2 restart</ |
- | **NB2 :** dans le cas de l' | + | <note tip> |
- | + | ||
- | | + | |
==== Activation du module SSL ==== | ==== Activation du module SSL ==== | ||
- | | + | <code bash>a2enmod ssl</ |
==== Activation du SSL sur un VirtualHost ==== | ==== Activation du SSL sur un VirtualHost ==== | ||
Dans le fichier de définition du // | Dans le fichier de définition du // | ||
+ | <code apache> | ||
< | < | ||
... | ... | ||
Ligne 115: | Ligne 148: | ||
... | ... | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Utilisation d'un certificat SSL par OpenSSL ===== | ||
+ | |||
+ | * Ajouter l' | ||
+ | * Redémarrer OpenLDAP : <code bash> | ||
+ | * Créer une version // | ||
+ | * Ajuster les droits du certificat et de la clé : <code bash> | ||
+ | chmod 644 / | ||
+ | chmod 640 / | ||
+ | </ | ||
+ | * Configurer le certificat et la clé via les attributs '' | ||
+ | ldapmodify -Y EXTERNAL -H ldapi:/// << EOF | ||
+ | dn: cn=config | ||
+ | changetype: modify | ||
+ | add: olcTLSCertificateFile | ||
+ | olcTLSCertificateFile: | ||
+ | - | ||
+ | add: olcTLSCertificateKeyFile | ||
+ | olcTLSCertificateKeyFile: | ||
+ | EOF | ||
+ | * Ajouter '' | ||
+ | * Redémarrer OpenLDAP : <code bash> | ||
+ | ===== Lister les ciphers supporté par un serveur ===== | ||
+ | |||
+ | **Script :** | ||
+ | <code bash># | ||
+ | |||
+ | # OpenSSL requires the port number. | ||
+ | SERVER=$1 | ||
+ | [ -z " | ||
+ | |||
+ | echo -n " | ||
+ | ciphers=$(openssl ciphers ' | ||
+ | |||
+ | echo "Check cipher support on server $SERVER :" | ||
+ | for cipher in ${ciphers[@]} | ||
+ | do | ||
+ | echo -n Testing $cipher... | ||
+ | result=$(echo -n | openssl s_client -cipher " | ||
+ | if [[ " | ||
+ | error=$(echo -n $result | cut -d':' | ||
+ | echo NO \($error\) | ||
+ | else | ||
+ | if [[ " | ||
+ | echo YES | ||
+ | else | ||
+ | echo UNKNOWN RESPONSE | ||
+ | echo $result | ||
+ | fi | ||
+ | fi | ||
+ | done</ | ||
+ | |||
+ | **Usage :** < |