es certificats racines sont des clés publiques non signées, ou auto-signées, dans lesquelles repose la confiance. Les logiciels, comme les navigateurs web ou les clients de messagerie détiennent des certificats racines de nombreuses autorités de certification commerciales ou gouvernementales. Quand un navigateur ouvre une connexion sécurisée (TLS/SSL) vers un site possédant un certificat émis par une autorité connue, il considère le site comme sûr dans la mesure où le chemin de certification est validé. Le passage en mode sécurisé est alors transparent.
## Chaînes de certification
* Un certificat est rarement signé par une CA racine
* La CA racine créé plusieurs CA intermédiaires
* sous scellé / déconnecté / sorti pour générer
* auto signé
* Les CA intermédiaires signent
* les certificats des clients
* d'autres CA intermédiaires
* il faut alors fournir la chaîne de certification
* au cas où l'intermédiaire ne soit pas dans le navigateur
## X.509 Demande de certificat Certificate Sign Request (CSR)
* valeur aléatoire **ClientRandom** pour la dérivation des clés
## Handshake - ServerHello
* Aucune des propositions du client n'est jugée acceptable
* message de type **Alert**
* fin de la connexion
***ServerHello** fait état du choix de la suite cryptographique parmis celles proposées
* première suite cryptographique préférée et proposée par le client
* comportement IIS par défaut
* directive *SSLHonorCipherOrder* pour forcer ce comportement pour apache
* première suite proposée par le client et supportée par défaut
***Certificate** contient le Certificat du serveur
***ServerHelloDone** attente de réponse du client
* valeur aléatoire **ServerRandom** pour la dérivation des clés
* Les données échangées par la suite entre le client et le serveur sont chiffrées et authentifiées à l'aide de clés dérivées
* Deuxième phase: authentificaiton du client
* optionnelle
Note:
-[Why does the SSL/TLS handshake have a client and server random?](http://security.stackexchange.com/questions/89383/why-does-the-ssl-tls-handshake-have-a-client-and-server-random)
- This would mean that the entire key generation routine was based on client generated values
- If a Man-In-The-Middle attacker replayed the handshake, the same pre-master secret would be sent and then used for the connection.
- Having the server generate a random value (ServerHello.random) will mean that the MAC (message authentication code) secret is different if the ClientHello.random is repeated, and therefore the MAC and encryption keys will be different, preventing any replay attack.
## Handshake - cypher suite TLS_RSA_WITH_RC4_128_MD5
* génération d'une *pre-master secret* : secret de session
* chiffrer en utilisant la clé publique du certificat
***ClientKeyExchange** contient l'aléa chiffré que seul le serveur pourra déchiffrer
* la communiation est chiffré de manière symétrique
* RC4_128 algorithme de chiffrement [RC4](https://fr.wikipedia.org/wiki/RC4) avec clé de 128 bits
* pour chiffrer le canal de communication
*[MD5](https://fr.wikipedia.org/wiki/MD5)
* protection de l'intégrité du canal de communication via [HMAC MD5](https://fr.wikipedia.org/wiki/Keyed-Hash_Message_Authentication_Code)
Note:
-[Why does the SSL/TLS handshake have a client and server random?](http://security.stackexchange.com/questions/89383/why-does-the-ssl-tls-handshake-have-a-client-and-server-random)
- This would mean that the entire key generation routine was based on client generated values
- If a Man-In-The-Middle attacker replayed the handshake, the same pre-master secret would be sent and then used for the connection.
- Having the server generate a random value (ServerHello.random) will mean that the MAC (message authentication code) secret is different if the ClientHello.random is repeated, and therefore the MAC and encryption keys will be different, preventing any replay attack.
## Handshake - Finished
* Le client vérifie la chaîne de certification du certificat
* chaîne de certification invalide
* fin de la connexion
* chaîne de certification valide
* le client renvoie le *pre-master sercet* chiffré dans **ClientKeyExchange**
* le **pre-master secret**, le **ClientRandom** et le **ServerRandom** sont connus du client et du serveur
* ces éléments partagés sont alors dérivés pour générer les clés symétriques utilisés par
* RC4 pour la confidentialité du trafic
* HMAC MD5 pour l'intégrité du trafic
* les messages **ChangeCiperSpec** sont échangés pour indiquer l'activation des algorithmes et des clés
* les messages **finished**
* premiers messages chiffrés
* contiennent un condensat de tous les messages échangés
* la connaissance de la clé privée n'est d'aucun intérêt
*[PFS (*Perfect Forward Secrecy*)](https://fr.wikipedia.org/wiki/Confidentialit%C3%A9_persistante): la connaissance de la clé privée n'apporte pas d'avantage pour déchiffrer
*[Online Certificate Status Protocol (OCSP)](https://fr.wikipedia.org/wiki/Online_Certificate_Status_Protocol)
*[abandonner côté client en cas de certififcat révoqué](https://wiki.mozilla.org/CA:ImprovingRevocation)
* maintenir un cache de réponse valide côté serveur
*[Approche par log publique de création révocation](http://confiance-numerique.clermont-universite.fr/Slides/R-Sasse.pdf)[<i class="fa fa-video-camera"></i>](http://webtv.u-clermont1.fr/media-MEDIA150907102804168)
*[OpenSSL Decoder](https://raymii.org/s/software/OpenSSL_Decoder.html) avec [son post de blog](https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html)
* Tester son navigateur
*[SSL Cipher Suite Details of Your Browser](https://cc.dcsec.uni-hannover.de/)
*[<i class="fa fa-book"></i> Chrome, Firefox et recherches Google : passage en force du HTTPS](http://dareboost.developpez.com/tutoriels/securite-web/https-nouveaute-recherche-google-chrome-firefox/)
Note:
- aspect arbitraire de la notation notamment qualys
- méfiance quand il y aquelque chose à vendre
- SSL en fait TLS on est d'accord
## <i class="fa fa-medkit"></i> Se protéger
* Seules les implémentations conformes à TLSv1 et supérieures doivent être employées
* Les cyphersuites offrant la PFS doivent être favorisées
*[Anssi - SSL/TLS: état des lieux et recommandations](www.ssi.gouv.fr/.../SSL_TLS_etat_des_lieux_et_recommandations.pdf)
* Apache tips
*[Chiffrement fort SSL/TLS : Mode d'emploi](https://httpd.apache.org/docs/2.4/fr/ssl/ssl_howto.html)
*[Hardening Your Web Server’s SSL Ciphers](https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/)
*[ssllabs.com's own Apache SSL Config Directives](https://community.qualys.com/thread/9652)
*[Apache web server SSL best practices](https://wiki.fysik.dtu.dk/it/SSL_best_practices)
* Nginx tips
*[HTTPS on Nginx: From Zero to A+ (Part 1)](https://juliansimioni.com/blog/https-on-nginx-from-zero-to-a-plus-part-1/)
*[HTTPS on Nginx: From Zero to A+ (Part 2)](https://juliansimioni.com/blog/https-on-nginx-from-zero-to-a-plus-part-2-configuration-ciphersuites-and-performance/)
## <i class="fa fa-medkit"></i> Se protéger
* Multi server tips
*[https://cipherli.st/](https://cipherli.st/) pour une conf sécurisée
*[<i class="fa fa-warning"></i> Modifier tous les vhosts pour nginx!!](http://serverfault.com/questions/641150/nginx-cant-disable-sslv3)
* fixer le [weak Diffie-Hellmani (aka logjam Attack](https://weakdh.org/))