Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
informatique:securite:manip_certificat_ssl [2014/04/22 09:07] – créée bn8 | informatique:securite:manip_certificat_ssl [2025/01/10 08:53] (Version actuelle) – [Activation du SSL sur un VirtualHost] bn8 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Manipulation de certificats SSL ====== | ====== Manipulation de certificats SSL ====== | ||
- | ===== Génération d'un certificat SSL auto-signé | + | ===== Générer |
+ | ==== Version simple ==== | ||
- | 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. | + | <code bash> |
- | < | + | ou |
+ | < | ||
+ | FILE=cert-domain.tld | ||
+ | openssl | ||
- | Nous générons ensuite le certificat autosigné | + | ==== Version complète ==== |
- | | + | <code bash> |
+ | CN=" | ||
+ | FILE=cert-domain.tld | ||
+ | STATE=My State | ||
+ | VILLE=My City | ||
+ | PAYS=FR | ||
+ | ORGA=My Company | ||
+ | ORGA_UNIT=My Unit | ||
+ | openssl req -new -newkey rsa: | ||
- | 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 | + | < |
- | | + | |
- | * -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, | + | <note tip>Pour voir les informations dans un fichier CSR, utiliser la commande suivante : <code bash> |
- | **Pour vérifier le bon usage du certificat :** | + | ==== Génération d'un CSR multi-domaine ==== |
- | openssl x509 -in server.crt -text -noout | + | Pour un certificat multi-domaine, c'est à dire incluant l’extension // |
+ | * 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> | ||
+ | |||
+ | ===== Génération d'un certificat SSL auto-signé ===== | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Pour faciliter la suite, déclarons une variable d' | ||
+ | |||
+ | Générerons ensuite la clé //RSA// : <code bash> | ||
+ | chown root: | ||
+ | chmod 640 / | ||
+ | |||
+ | Générons ensuite le certificat autosigné : <code bash> | ||
+ | chmod 644 / | ||
+ | |||
+ | 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 :** | ||
+ | * **'' | ||
+ | * **'' | ||
===== 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 35: | 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 45: | 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 78: | 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 :** < |