From 7d667c6d308db56b9dd3892985ceace5beb9f3f5 Mon Sep 17 00:00:00 2001 From: mazenovi <vmazenod@gmail.com> Date: Thu, 18 Jan 2018 00:33:29 +0100 Subject: [PATCH] enahnce ssl --- content/slides/privacy/md/TLSvsGPG.md | 4 +- content/slides/privacy/md/ssl.md | 740 +++++++++++++++++++++----- content/slides/privacy/ssl.html | 15 +- 3 files changed, 610 insertions(+), 149 deletions(-) diff --git a/content/slides/privacy/md/TLSvsGPG.md b/content/slides/privacy/md/TLSvsGPG.md index 8756808..5a77525 100644 --- a/content/slides/privacy/md/TLSvsGPG.md +++ b/content/slides/privacy/md/TLSvsGPG.md @@ -11,5 +11,5 @@ * Chiffre les messages * Graph orienté de confiance -X.509 centralise -PGP distribue +X.509 centralise la confiance sur les CA +PGP distribue la confiance entre utilisateurs diff --git a/content/slides/privacy/md/ssl.md b/content/slides/privacy/md/ssl.md index 1cfab76..3a45807 100644 --- a/content/slides/privacy/md/ssl.md +++ b/content/slides/privacy/md/ssl.md @@ -3,141 +3,260 @@ # <i class="fa fa-user-secret" aria-hidden="true"></i> -## [X.509](https://fr.wikipedia.org/wiki/X.509) +### OpenSSL + +* Implémenté en C +* Boîte à outils de chiffrement + * bibliothèques cryptographie générale + * bibliothèques implémentant le protocole SSL + * commande en ligne +* Supporte SSL 2.0, SSL 3.0 et TLS 1.0 +* Actuellement TLS 1.2 +* Distribué sous une licence de type Apache + + +### GnuTLS -* 1988 par l'UIT (agence de l'ONU le développement spécialisé dans les TIC ) -* norme Pour - * les certificats à clé publique - * les listes de révocation de certificats - * les attributs de certificats - * un algorithme de validation du chemin de certification +* Conforme aux spécifications de l'IETF +* Permet l'authentification via les certificats + * X509 + * PGP +* A la différence d'OpenSSL, GnuTLS est compatible avec les licences GPL + + +### [X.509](https://fr.wikipedia.org/wiki/X.509) + +* Norme Pour + * certificats à clé publique + * listes de révocation de certificats + * attributs de certificat + * algorithme de validation du chemin de certification + +* UIT (agence de l'ONU le développement spécialisé dans les TIC ) + * v1: 1988, v2: 1993, v3: 1996 ## [X.509](https://fr.wikipedia.org/wiki/X.509) -* repose sur un système hiérarchique d'autorités de certification (AC) - * une AC attribue un certificat liant - * une clé publique - * un nom distinctif (Distinguished Name -DN) - * un nom alertnatif (Alternative Name - AN) - * mail - * enregistrement DNS +* Système hiérarchique d'autorités de certification + * *certification authority - **CA*** + * une CA attribue un certificat liant + * une clé publique + * un nom distinctif + * *Distinguished Name - **DN*** -## [X.509](https://fr.wikipedia.org/wiki/X.509) Anatomie +## [X.509](https://fr.wikipedia.org/wiki/X.509) DN -* Version -* Serial +* C: Country +* L: Locality +* ST: State +* O: Organisation +* SO: Organizational Unit +* CN: Common Name +* Street: Adress +* E: Mail + + +#### Anatomie + +* **Version de la norme** +* **Serial** * Algorithme de signature du certificat -* **Subject** DN identifié par le certificat -* **Issuer** le signataire -* **Public Key** -* **Not Before** date de début de validité -* **Not After** date de finde validité -* Extensions - * Key Usage - * Subject Key Identifier -* Signature des informations ci-dessus par l'autorité de certification - * hashé de tous les attributs - * signé avec la clé privée de l'AC - * signé avec la clé privée d'une AC de plus haut niveau +* **Issuer** le signataire (DN de la CA) +* **Validty** début fin de validité +* **Subject name** DN identifié par le certificat +* **Subject Public Key** +* Extensions (ajouté en v3) + * paires clé / valeur + +Le tout signé par la CA + +#### Extensions -## X.509 Subject +Informations ou contraintes d'utilisation +* **Key Usage** +* **Subject Key Identifier** +* **keyEncipherment** Algorithme de signature du certificat +* **rfc822Name** email address +* **dNSName** DNS name for a machine +* **uniformResourceIdentifier** URL +* **iPAddress** -Toujours un CN (common name) -et plein d'informations supplémentaires -notamment -pays -région -... -copier le prompt interactif d'une création de clé rsa / ssl +## générer une clé RSA +``` +openssl genrsa -out ca.key 4096 +``` -## X.509 générer un certificat +* 4096 représente la taille de la clé +* ```ca.key``` contient la clé privée ET la clé publique -openssl req -x509 -key KEY -subj /CN=example.com -out CERTIFICATE +``` +openssl rsa -in ca.key -pubout +``` -% cat CERTIFICATE +* Permet d'extraire la partie publique uniquement + + +## générer un certificat + +``` +openssl req -new -x509 -days 1826 \ + -key ca.key -out ca.crt \ + -subj '/CN=www.rootdom.com/O=My Root Company Name LTD./C=US' +``` + +``` +% cat ca.crt -----BEGIN CERTIFICATE----- MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow +``` -* faire parler un certificat +https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats -openssl x509 -text -noout -in CERTIFICATE +## faire parler un certificat -## X.509 / RSA +``` +openssl x509 -text -noout -in ca.crt +``` -* utilisé par openssl de manière transparente +``` +openssl s_client -connect isima.fr -showcerts +``` -* openssl genrsa -out KEY - * contient la clé privée ET la clé publique +Avec son navigateur en cliquant sur le cadenas ---copier le contenu du fichier +``` +openssl x509 -purpose -in ca.crt -inform PEM +``` +* Permet d'obtenir obtenir les usages possibles de la clé -* openssl rsa -in KEY -pubout - * permet d'extraire la partie publique uniquement ---copier le contenu de l'output +## Autorité de certificaiton (CA) +* Tiers de confiance +* Recueille les demandes de certifications + * Vérifie la validité de la demande + * Vérifie l'identité + * Preuve par contrôle des domaines +* Signe les certificats +* Gère les révocations -## X.509 vérification de la signature -openssl verify -CAfile CERTIFICATE CERTIFICATE +## Autorité de certificaiton (CA) -Certificat auto-signé -* Issuer et Subject identiques - * X509v3 Subject Key Identifier = X509v3 Authority Key Identifier -* Tout le monde peut en fabriquer -* Rejeté par défaut par les navigateurs +* CA de confiance + * importées par défaut dans le navigateur +* Tout supprimer? +* Etre importée dans les navigateurs + * payer (le navigateur) -## X.509 Autorité de certificaiton (CA) -* tiers de confiance -* recueillir les demandes de certifications - * vérifie la validité de la demande - * vérifie l'identité - * preuve de controle des domaines - * signent les certificats - * gèrent les révocations +## X.509 Autorité de certificaiton (CA) gratuites +* https://www.startcomca.com/index/support?v=1 +* CACERT n'est pas une autorité de certification intégré aux navigateurs +* let's encrypt (http://formulae.isima.fr/) + + +## known good signers + + +<div style="text-align: center;"> + <img src="images/ssl/known-good-signers.png" width="80%" /> +</div> -* Autorités de confiance - * importées par défaut dans le navigateur -* navigateur sans autorité de certifications importées? -* critères d'importation pour les navigateurs - * infra ad hoc - * payer (le navigateur) -CACERT n'est pas une autorité de certification intégré aux navigateurs +## Certificate Authority (CA) +<div style="text-align: center;"> + <img src="images/ssl/https-ff.png" width="80%" /> +</div> -## Root CA + +## Certificate Authority (CA) + +<div style="text-align: center;"> + <img src="images/ssl/https-chrome.png" width="80%" /> +</div> + + +## CA racine https://fr.wikipedia.org/wiki/Certificat_racine 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) -openssl req -new -subj /CN=example.com -key KEY -out CSR -% cat CSR +``` +openssl req -new -newkey rsa:2048 -sha256 \ + -nodes -out user.csr -keyout user.key \ + -subj '/CN=example.com' +``` -openssl req -in CSR -text -noout +``` +openssl req -in user.csr -text -noout +``` -CSR auto-signé -permet de valider l'intégrité du CSR -vérifie que le domaine correspond à un nom de domaine géré par le compte courant -* Serial -* Issuer -* validité -du CSR la CA créée le certificat, en ajoutant quelques informations et en signant avec sa clé privée +vérifier le csr + +``` +openssl req -text -noout -verify -in user.csr +``` + +``` +openssl x509 \ + -CA ca.crt -CAkey ca.key \ + -CAcreateserial -CAserial serial \ + -in user.csr -out user.crt \ + -req -days 365 +``` + +https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs + +* un CSR est auto-signé (pour vérifier l'intégrité) +* l'AC vérifie que le domaine correspond à un nom de domaine géré par le compte courant + +* la CA créée le certificat, en ajoutant quelques informations et en signant avec sa clé privée * lui il a intérêt à bien gérer ses clés pour ne pas être compromis * en case de compromission on révoque + +## X.509 vérification de la signature + +``` +openssl verify -CAfile ca.crt user.crt +``` + +Certificat auto-signé +* Issuer et Subject identiques + * X509v3 Subject Key Identifier = X509v3 Authority Key Identifier +* Tout le monde peut en fabriquer +* Rejeté par défaut par les navigateurs + +https://stackoverflow.com/questions/25482199/verify-a-certificate-chain-using-openssl-verify + + + ## X.509 Révocation de certificats * Certificate Revocation List (CRL) * contient une liste de certifact valide à révoquer @@ -149,38 +268,38 @@ Mécanisme nécessaire en cas de compromission / décommissionnement * Quand-est-ce que le navigateur l’actualise ? -## Online Certificate Status Protocol (OCSP) -Protocole d’interogation de la validité d’un certificat -But : palier à la faiblesse de mise à jour des CRL par les clients -* [How can you set Firefox to, or tell if FF is always checking for certificate revocation?](https://support.mozilla.org/fr/questions/994310) - * Interroger le répondeur OCSP pour confirmer la validité de vos certificats -* très peu déployé - -## Résumé +## X.509 liste de révocation (CRL) -des CA délivre des certificats -la confinance est centralisée sur la CA +* Serial +* Algorithme de signature de la CRL +* **Issuer** le signataire (DN de la CA) +* **Update date ** +* **Next Update date** +* **CRL** + * revoked 1 + ... + * revoked 1 +* Extensions + * paires clé / valeur -## implémentations -### OpenSSL +## X.509 liste de révocation (CRL) extensions -* Implémenté en C -* Boîte à outils de chiffrement - * bibliothèques cryptographie générale - * bibliothèques implémentant le protocole SSL - * commande en ligne -* Supporte SSL 2.0, SSL 3.0 et TLS 1.0. -* Distribué sous une licence de type Apache +* reasonCode + 0. Unspecified + 1. KeyCompromise + 2. CACompromise + 3. AffiliationChanged + ... -<br /> -### GnuTLS +## Online Certificate Status Protocol (OCSP) -* conforme aux spécifications de l'IETF - * supporte TLS 1.1, TLS 1.0, SSL 3.0 et les extensions TLS -* permet l'authentification via les certificats X509 et PGP -* A la différence d'OpenSSL, GnuTLS est compatible avec les licences GPL +* Protocole d’interogation de la validité d’un certificat +* But : palier à la faiblesse de mise à jour des CRL par les clients + * [How can you set Firefox to, or tell if FF is always checking for certificate revocation?](https://support.mozilla.org/fr/questions/994310) + * Interroger le répondeur OCSP pour confirmer la validité de vos certificats +* très peu déployé ## SSL / TLS @@ -193,7 +312,18 @@ la confinance est centralisée sur la CA * Protocle initialement pensé pour sécurisé HTTP * étendu à d'autres services ( SMTP, LDAP, VPN, etc ...) -<br /> + +## SSL dans le modèle TCP/IP + +<div style="text-align: center"> +  +</div> + +* Couche intermédiaire car indépendante du protocole utilisé + * situé entre Transport et Application du modèle **TCP/IP** + * situé entre Transport et Présentation modèle **OSI** + * utilise la couche session pendant la négociation (cache) + #### Versions SSL (Secure Socket Layer) @@ -201,7 +331,6 @@ la confinance est centralisée sur la CA * 2.0 par Netscape en Février 1995, (trous de sécurité) [The SSL Protocol Version 2.0](http://www.frameip.com/rfc/draftxxx.php) * 3.0 par Netscape en Novembre 1996, [The SSL Protocol Version 3.0](http://www.frameip.com/rfc/draft302.php) -<br /> #### Versions TLS (Transport Layer Security) @@ -213,37 +342,142 @@ la confinance est centralisée sur la CA ## Connexion SSL/TLS (exemple : HTTPS) 1.Le serveur -▶ Envoie son certificat au client + * Envoie son certificat au client 2.Le client -▶ Reçoit un certificat -▶ Vérifie sa validité (domaine, date, émetteur, révocation) -▶ Génère une clé de chiffrement symétrique (secret partagée) -▶ Chiffre le secret partagée avec la clé publique du serveur -▶ Envoie la clé chiffrée au serveur (ClientKeyExchange) + * Reçoit un certificat + * Vérifie sa validité (domaine, date, émetteur, révocation) + * Génère une clé de chiffrement symétrique (secret partagée) + * Chiffre le secret partagée avec la clé publique du serveur + * Envoie la clé chiffrée au serveur (ClientKeyExchange) 3.Le serveur -▶ Reçoit la clé partagée chiffrée générée par le client -▶ Déchiffre la clé partagée avec sa clé privée + * Reçoit la clé partagée chiffrée générée par le client + * Déchiffre la clé partagée avec sa clé privée + +La suite de la communication est chiffrée symétriquement -La suite de la communication est chhifrée symétriquement ## Connexion SSL/TLS (exemple : HTTPS) Remarques : -▶ Le client a authentifié le serveur, -mais le serveur n’a aucune -information sur le client - * possibilité d'avoir un certificat côté client +* Le client a authentifié le serveur + * mais le serveur n’a aucune information sur le client + * possibilité d'avoir un certificat côté client -▶ Les paramètres de chiffrements -sont négociés et « jetables » +* Les paramètres de chiffrements + * sont négociés et « jetables » [slide55] mais reprendre les miens détaillé les étapes -## en cas de compromission +## 4 sous-protocoles -* la clé privée est compromise -* elle permet donc déchiffrer ce qui a été chiffré avec la clé publique -* le secret de connexion est donc retrouvable à tous les coups +* [déroulement des échanges ssl](https://www.securiteinfo.com/cryptographie/ssl.shtml) + +* **Handshake** + * authentification mutuelle du client et serveur + * négociation des algorithmes de chiffrement, de hachage + * échange des clés symétriques qui assurent le chiffrement. +* **Change Cipher Spec** + * validation de la négociation préalable, vérifie ques deux partis se sont bien accordés quat à la clé maîtresse, aux algorithmes à employer +* **Alert** + * protocole informatif de l'état de la liaison +* **Record** + * protocole d'acheminement des données de la communication. Ce protocole peut encapsuler tout autre protocole et le rend ainsi sécurisé + + +## Handshake + +<!-- .element: style="float: right" --> + + +## Handshake - ClientHello + +* **ClientHello** + * propose les suites cryptographiques qu'il sait gérer + * pour + * établir les éléments secrets de session + * authentifier les parties + * chiffrer les données applicatives + * protéger les données applicatives en intégrité + +<pre><code class="hljs bash" style="font-size: 45px">$ openssl ciphers -v</code></pre> + +* 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) + - master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random) + - Why not just use the pre-master? + - 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 + +* [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA) + * authentification du serveur + * établissement des secrets de session + * quand le client a reçu le certificat du serveur + * 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) + - master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random) + - Why not just use the pre-master? + - 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 + * intégrité de la négociation + + +## Suite cryptographique + +* https://fr.wikipedia.org/wiki/Suite_cryptographique ## Perfect Forward Secrecy (PFS) @@ -260,6 +494,112 @@ La PFS introduit un ServerKeyExchange * problème np complet (voir avec Pascal) +## Vulnérabilité TLS_RSA_WITH_RC4_128_MD5 + +* si la clé privée est récupérée + * le *pre master secret* est récupérable aussi + * on peut obtenir les clés de session + * toutes les communications sont alors déchiffrables + * passées + * futures + + +## Diffie-Hellman éphémère + + + + +## Diffie-Hellman exchange + + + + +## Diffie-Hellman éphémère + +* DHE ou ECDHE + * échange de clé Diffie-Hellman + * éléments secrets éphémères + * ne transitent pas en vérité + * 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 + * Authentification du serveur explicite + * **ServerKeyExchange** + * signature RSA + * paramètres Diffie-Hellman + * aléas (**ClientRandom** ou **ServerRandom**) + + +## Handshake - SSLv2 + + + +* Il n'y a pas de message **finished** + * **finished** protège l'échange en intégrité + * corrigé à partir de SSLv3 + + +## Handshake - SSLv2 - MIM + + + +Note: +- attaque man in the middle permet de faire baisser la sécurité des méthodes supportés par le client ou le serveur + - pas de déchiffrement à la volée + - mais possible avec un peu de temps +- SSLv2 est aussi vulnérable parce que + - utilise MD5 dasn toutes ses cyphersuites + - utilise la même clé pour protéger le fulx en intégrité et en confidentialité + - pas de mécanisme de signalement de fin de connexion + - attaques par "troncature" du flux +- SSLv2 ne doit pas être utilisé + + +## Renégociation sécurisée + +* en cas de + * rafraichaissement des clés + * en cas d'authentification du client + * le serveur initie une renégociation + * demande le certificat client (pour un accès à du contenu protéger) + +* à l'intiative du client ou du serveur + + +## Renégociation - TLS + + + + +## Renégociation - TLS - MIM + + + + +## Vulnérabilités multiples + +* [mai 2015] - [Weak Diffie-Hellman and the Logjam Attack](https://weakdh.org/) + * permet de forcé les connexions TLS à 512-bit export-grade cryptography + * [Freack Attack](https://freakattack.com/) réminiscence +* [octobre 2014] - [Poddle](http://www.dwheeler.com/essays/poodle-sslv3.html) + * [POODLE test](https://www.poodletest.com/) +* [mars 2014] - [Heartbleed](https://fr.wikipedia.org/wiki/Heartbleed) + * lecture de la mémoire du serveur via un heartbeat + +* [OpenSSL vulnerabilities](https://www.openssl.org/news/vulnerabilities.html) +* [GnuTLS security](http://www.gnutls.org/security.html) + +Note: +- La négociation de la cypher suite browser / server + - Le forçage du choix mininmum est à considérer + + +## en cas de compromission + +* la clé privée est compromise +* elle permet donc déchiffrer ce qui a été chiffré avec la clé publique +* le secret de connexion est donc retrouvable à tous les coups + + ## Chiffrer pour plusieurs destinataires On ne veut pas envoyer n messages distincts, ni un message chiffré avec n clés différentes @@ -271,19 +611,6 @@ On ne veut pas envoyer n messages distincts, ni un message chiffré avec n clé Chaque destinataire peut déchiffrer la clé partagée avec sa clé privée et déchiffrer le message -## 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 - - ## Certificats clients * Un client peut présenter un certificat au serveur @@ -292,6 +619,7 @@ Chaque destinataire peut déchiffrer la clé partagée avec sa clé privée et d * Le certificat peut être stocké dans un périphérique (e.g. Yubikey), une carte à puce (e.g. CPS), ... vérifier avec le CNRS + ## Certification Authority Authorization (CAA) * Une CA peut vérifier si elle est autorisée à émettre un certificat pour un domaine via le DNS (enregistrement CAA) @@ -313,9 +641,131 @@ vérifier avec le CNRS On peut se passer des CA +## HTTPS + + + +* HTTP + SSL/TLS = HTTPS assure + * Confidentialité + * [Session Hijacking](http://en.wikipedia.org/wiki/Session_hijacking) + * [les dangers du wifi](https://wiki.wireshark.org/CaptureSetup/WLAN) + * [firesheep](http://codebutler.github.io/firesheep/) + * Intégrité + * Authentification (via les certificats) + +* __Open SSL__ + * mod_ssl +* __GnuTLS__ + * [mod_gnutls](https://technique.arscenic.org/lamp-linux-apache-mysql-php/apache-le-serveur-http/modules-complementaires/article/installer-et-configurer-le-module) + + +## Que "chiffre" https + +[<!-- .element width="50%" -->](http://security.stackexchange.com/questions/2914/can-my-company-see-what-https-sites-i-went-to) + +* On ne voit pas l'url dans le traffic + * mais on voit l'hôte +* Anonimisation complète via un proxy https ou VPN + * obfusquent complètement le traffic + +Note: +- Attention les proxy + - surtout anonymes sont de faux amis + - ce n'est pas un vpn + - pose des problèmes de certificats + - proxy https = MITM + + +## Autres vulnérabilités + +* [Public Key Infrastructure (PKI)](https://fr.wikipedia.org/wiki/Infrastructure_%C3%A0_cl%C3%A9s_publiques) + * certificats + * rarement testés par le navigateur + * [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) + * [Google's Certificate Transparency project](http://www.certificate-transparency.org/) + * peut on faire confiance aux certificats valides? + * [Certificate authorities issue SSL certificates to fraudsters](http://news.netcraft.com/archives/2015/10/12/certificate-authorities-issue-hundreds-of-deceptive-ssl-certificates-to-fraudsters.html) + * peut on faire confiance à toutes les PKI? + * celles qui délivrent des certificats systématiquement autorité de certifications + +* [cypher suite](https://fr.wikipedia.org/wiki/Suite_cryptographique) + * [New RC4 Encryption Attacks Reduces Plaintext Recovery Time](http://it.slashdot.org/story/15/07/17/019235/new-rc4-encryption-attacks-reduces-plaintext-recovery-time) + * [A freestart collision example for SHA-1](https://sites.google.com/site/itstheshappening/) + * [MD5 vulnerable to collision attacks](https://www.kb.cert.org/vuls/id/836068) + +Note: +- Repose sur la confiance dans les autorités de conifance + - Honnêteté et sécurité des autorités de certification + - signé par une autorité de confiance, chaine valide + - on calcule le hash avec la clé publique de l'autorité et on la compare au hash du certificat + + +## <i class="fa fa-gears"></i> Quelques outils + +* Obtenir un certificat SSL valide + * [letsencrypt.org](https://letsencrypt.org) entièrement gratuit (à renouveler tous les 90 jours) + * [startssl.com](https://www.startssl.com) 1 domaine + 1 sous domaine gratuits + * [gandi.net](http://gandi.net) 1 domaine ou sous domaine gratuit par non de domaine acheté chez gandi +* Tester un certificat SSL + * https://ssldecoder.org/ + * https://certificatemonitor.org/ +* Tester une configuration SSL + * [Qualys](https://www.ssllabs.com/ssltest/) + * [Comodo ssl analyzer](https://sslanalyzer.comodoca.com/) + * [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/) + * [How's my SSL?](https://www.howsmyssl.com/) + * [<i class="fa fa-firefox"></i> Toggle Cipher Suites](https://addons.mozilla.org/fr/firefox/addon/toggle-cipher-suites/), [<i class="fa fa-github"></i> Toggle Cipher Suites](https://github.com/dillbyrne/toggle-cipher-suites/releases) + * [<i class="fa fa-github"></i> Calomel SSL validator](https://addons.mozilla.org/fr/firefox/addon/calomel-ssl-validation/) +* Comprendre son navigateur + * [<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/)) + +<pre><code class="hljs bash" style="font-size: 28px"> openssl dhparam -out dhparams.pem 2048 </code></pre> + +* suivre les [<i class="fa fa-book"></i> recommandations de l'ANSSI](https://www.ssi.gouv.fr/agence/publication/ssltls-3-ans-plus-tard/) + +<br /> + +#### dans tous les cas + +#### bien regarder la date ... -## exemple des clés SSH +### car valable jusqu'à la prochaine faille!!!<!-- .element class="fragment rollin" --> -* exemple aussi avec github +Note: +- Désactiver tout services non sécurisés + - préférer sftp à ftp, ssh à telnet ou rlogin ... -## let's encrypt +http://www.cypherpunks.to/~peter/T2a_X509_Certs.pdf diff --git a/content/slides/privacy/ssl.html b/content/slides/privacy/ssl.html index 25c40ea..52fc195 100644 --- a/content/slides/privacy/ssl.html +++ b/content/slides/privacy/ssl.html @@ -4,7 +4,7 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> - <title>PGP / GPG</title> + <title>SSL</title> <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> @@ -48,7 +48,18 @@ center: false, dependencies: [ { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, - { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } ] -- GitLab