petites améliorations/corrections

This commit is contained in:
gcolpart 2016-10-27 02:46:43 +02:00
parent 61ad9b6d54
commit a8ef8bedef

View file

@ -16,20 +16,20 @@ On parle désormais de **SSL/TLS** car les normes récentes ont renommé SSL en
Pour générer une clé privée non chiffrée (private.key) et sa demande de certificat associé (demande.csr) à transmettre à une autorité de certification :
~~~
~~~{.bash}
$ openssl req -newkey rsa:2048 -sha256 -nodes -keyout private.key -out demande.csr
~~~
À des fins pédagogiques, on peut découper la cette génération en 2 étapes, à savoir la génération de la clé privée et la demande de certificat :
~~~
~~~{.bash}
$ openssl genrsa -out private.key 2048
$ openssl req -new -sha256 -key private.key -out demande.csr
~~~
Pour générer une demande de certificat à partir d'un certificat existant (certificat.crt) :
~~~
~~~{.bash}
$ openssl x509 -x509toreq -sha256 -in certificat.crt -out demande.csr -signkey private.key
~~~
@ -38,7 +38,7 @@ $ openssl x509 -x509toreq -sha256 -in certificat.crt -out demande.csr -signkey p
1. Prérequis : avoir généré une clé et une demande de certificat (voir ci dessus)
2. Génération du certificat avec expiration dans 1000 jours :
~~~
~~~{.bash}
$ openssl x509 -req -sha256 -days 1000 -in demande.csr -signkey private.key -out certificat.crt
~~~
@ -59,13 +59,13 @@ Modifier une copie du fichier `/etc/ssl/openssl.cnf` avant de générer le certi
Puis générer la clé privée et le certificat associé (avec expiration dans 1000 jours) :
~~~
~~~{.bash}
$ openssl req -newkey rsa:2048 -nodes -x509 -sha256 -days 1000 -config openssl.cnf -extensions v3_req -keyout private.key -out certificat.crt
~~~
Si l'on veut plutôt une demande de certificat (pour transmettre à une autorité de certification) :
~~~
~~~{.bash}
$ openssl req -newkey rsa:2048 -nodes -sha256 -days 1000 -config openssl.cnf -extensions v3_req -keyout private.key -out demande.csr
~~~
@ -73,7 +73,7 @@ $ openssl req -newkey rsa:2048 -nodes -sha256 -days 1000 -config openssl.cnf -ex
Si une clé privée a été chiffrée (private.pem), on peut générer une version non chiffrée (private.key) ainsi :
~~~
~~~{.bash}
$ openssl rsa -in private.pem -out private.key
$ rm private.pem
~~~
@ -81,7 +81,7 @@ $ rm private.pem
### Ajouter un mot de passe à une clé privée
~~~
$ openssl rsa -in private.pem -des3 -out private.key
$ openssl rsa -in private.pem -des3 -out private.key
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
@ -91,7 +91,7 @@ Verifying - Enter PEM pass phrase:
Il suffit de répéter les 2 étapes ci-dessus :
~~~
~~~{.bash}
$ openssl rsa -in private.pem -out private.key
$ openssl rsa -in private.key -des3 -out private-new.pem
$ rm private.pem private.key
@ -100,17 +100,17 @@ $ mv private-new.pem private.pem
### Convertir un certificat PEM vers d'autres formats
Voir <http://security.ncsa.illinois.edu/research/grid-howtos/usefulopenssl.html>
Voir <http://security.ncsa.illinois.edu/research/grid-howtos/usefulopenssl.html>
Notamment pour PKCS 12 (ou PFX) vers PEM :
~~~
~~~{.bash}
$ openssl pkcs12 -in private.pfx -out private.pem
~~~
S'il s'agit de la clé :
~~~
~~~{.bash}
$ openssl pkcs12 -in private.pfx -nocerts -out private.pem
~~~
@ -124,25 +124,25 @@ Voir <http://trac.evolix.net/infogerance/wiki/HowtoLetsEncrypt>
Pour voir le contenu d'un certificat (certificat.crt) :
~~~
~~~{.bash}
$ openssl x509 -text -in certificat.crt
~~~
Pour voir le contenu d'un certificat d'un service réseau :
~~~
~~~{.bash}
$ openssl s_client -connect ssl.example.com:443
~~~
Pour voir le contenu d'une demande de certificat (demande.csr) :
~~~
~~~{.bash}
$ openssl req -text -in demande.csr
~~~
Pour lire le format PFX :
~~~
~~~{.bash}
$ openssl pkcs12 -info -in certificat.pfx
~~~
@ -150,7 +150,7 @@ $ openssl pkcs12 -info -in certificat.pfx
Pour s'assurer qu'un certificat est bien issu d'un clé privée, ou d'une demande de certificat (.csr), on peut vérifier la correspondance grâce au *modulus* que l'on peut extraire et comparer :
~~~
~~~{.bash}
$ openssl x509 -noout -modulus -in certificat.crt | openssl md5
$ openssl rsa -noout -modulus -in private.key | openssl md5
$ openssl req -noout -modulus -in demande.csr | openssl md5
@ -160,7 +160,7 @@ Si toutes les empreintes MD5 sont identiques, on est sûr que c'est issu de la c
Pour vérifier en une seule commande :
~~~
~~~{.bash}
$ diff <(openssl rsa -in private.key -modulus | grep Modulus) <(openssl x509 -in certificate.crt -modulus | grep Modulus)
~~~
@ -175,7 +175,7 @@ http://ocsp.example.com
Puis, interroger le serveur OCSP obtenu (ici http://ocsp.example.com) avec la chaine de certification (chainfile.pem) et le certificat (certificat.crt) à vérifier :
~~~
~~~{.bash}
$ openssl ocsp -issuer chainfile.pem -cert certificat.crt -text -url http://ocsp.example.com -header "HOST" "www.example.com"
~~~
@ -192,25 +192,25 @@ Revocation Time: Nov 2 09:30:00 2014 GMT
Pour vérifier un fichier de certificat en ligne de commande :
~~~
~~~{.bash}
$ openssl verify -CApath /etc/ssl/certs certificat.crt
~~~
Pour vérifier la conformité d'un certificat d'un service réseau en ligne de commande :
~~~
~~~{.bash}
$ openssl s_client -CApath /etc/ssl/certs -connect ssl.example.com:443
~~~
Pour un service réseau en STARTTLS (exemple avec SMTP, valable aussi pour POP3/IMAP/FTP) :
~~~
~~~{.bash}
$ openssl s_client -CApath /etc/ssl/certs -connect mail.site.com:25 -crlf -starttls smtp
~~~
Pour un service en HTTPS avec l'option SNI qui permet d'envoyer un nom de domaine au sein du protocole SSL/TLS (supporté par 99.9% des navigateurs récents) :
~~~
~~~{.bash}
$ openssl s_client -CApath /etc/ssl/certs -servername ssl.example.com -connect 192.0.2.42:443
~~~
@ -340,7 +340,7 @@ SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite AES128+EECDH:AES128+EDH
SSLHonorCipherOrder On
SSLCompression off
SSLSessionTickets off
#SSLSessionTickets off
SSLSessionCache shmcb:/var/log/apache2/ssl_sessioncache(10240000)
SSLUseStapling yes
SSLStaplingReturnResponderErrors off
@ -350,14 +350,13 @@ Header always set Strict-Transport-Security "max-age=2592000"
#### Configuration Nginx
En pratique avec Nginx (sous Debian 8), voici une configuration SSL avancée :
~~~
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "AES128+EECDH:AES128+EDH";
ssl_prefer_server_ciphers on;
ssl_session_tickets off;
#ssl_session_tickets off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_stapling on;