- X.509 / TLS
-
- OpenSSL
- GnuTLS
- X.509
- X.509
- X.509 DN
- Anatomie
- Extensions
- générer une clé RSA
- générer un certificat
- faire parler un certificat
- Autorité de certificaiton (CA)
- Autorité de certificaiton (CA)
- X.509 Autorité de certificaiton (CA) gratuites
- known good signers
- Certificate Authority (CA)
- Certificate Authority (CA)
- CA racine
- Chaînes de certification
- X.509 Demande de certificat Certificate Sign Request (CSR)
- X.509 vérification de la signature
- X.509 Révocation de certificats
- X.509 liste de révocation (CRL)
- X.509 liste de révocation (CRL) extensions
- Online Certificate Status Protocol (OCSP)
- SSL / TLS
- SSL dans le modèle TCP/IP
- Versions SSL (Secure Socket Layer)
- Versions TLS (Transport Layer Security)
- Connexion SSL/TLS (exemple : HTTPS)
- Connexion SSL/TLS (exemple : HTTPS)
- 4 sous-protocoles
- Handshake
- Handshake - ClientHello
- Handshake - ServerHello
- Handshake - cypher suite TLS_RSA_WITH_RC4_128_MD5
- Handshake - Finished
- Suite cryptographique
- Vulnérabilité TLS_RSA_WITH_RC4_128_MD5
- Diffie-Hellman éphémère
- Diffie-Hellman exchange
- Diffie-Hellman éphémère
- Handshake - SSLv2
- Handshake - SSLv2 - MIM
- Renégociation sécurisée
- Renégociation - TLS
- Renégociation - TLS - MIM
- Vulnérabilités multiples
- en cas de compromission
- Chiffrer pour plusieurs destinataires
- Certificats clients
- Certification Authority Authorization (CAA)
- DNS-Based Authentication of Named Entities (DANE)
- HTTPS
- Que "chiffre" https
- Autres vulnérabilités
- Quelques outils
- Se protéger
- Se protéger
- dans tous les cas
- bien regarder la date ...
- car valable jusqu'à la prochaine faille!!!
X.509 / TLS
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
- 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
-
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
- 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
- une CA attribue un certificat liant
-
certification authority - CA
X.509 DN
- 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
- 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
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
générer une clé RSA
openssl genrsa -out ca.key 4096
- 4096 représente la taille de la clé
-
ca.key
contient la clé privée ET la clé publique
openssl rsa -in ca.key -pubout
- 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
https://www.sslmarket.fr/ssl/help-la-difference-entre-certificats
faire parler un certificat
openssl x509 -text -noout -in ca.crt
openssl s_client -connect isima.fr -showcerts
Avec son navigateur en cliquant sur le cadenas
openssl x509 -purpose -in ca.crt -inform PEM
- Permet d'obtenir obtenir les usages possibles de la clé
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
- Vérifie l'identité
- Vérifie la validité de la demande
- Signe les certificats
- Gère les révocations
Autorité de certificaiton (CA)
- 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) 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
Certificate Authority (CA)
Certificate Authority (CA)
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
- il faut alors fournir la chaîne de certification
X.509 Demande de certificat Certificate Sign Request (CSR)
openssl req -new -newkey rsa:2048 -sha256 \
-nodes -out user.csr -keyout user.key \
-subj '/CN=example.com'
openssl req -in user.csr -text -noout
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
-
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
- lui il a intérêt à bien gérer ses clés pour ne pas être compromis
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
Mécanisme nécessaire en cas de compromission / décommissionnement
On informe la CA La CA ajoute le certificat a sa liste de certificats révoqués Cette liste est signée par la CA - Habituellement c’est la même clé qui signe les certificats et les CRL
- Quand-est-ce que le navigateur l’actualise ?
X.509 liste de révocation (CRL)
- 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
X.509 liste de révocation (CRL) extensions
- reasonCode
0. Unspecified
- KeyCompromise
- CACompromise
- AffiliationChanged ...
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?
- Interroger le répondeur OCSP pour confirmer la validité de vos certificats
-
How can you set Firefox to, or tell if FF is always checking for certificate revocation?
- très peu déployé
SSL / TLS
- Crée un canal de communication authentifié, protégé en confidentialité et en intégrité
- Utilise des certificats X509
- délivrés par des autorités de certification
- Utilise un système de chiffrement asymétrique
- pour échanger une clé symétrique
- Protocle initialement pensé pour sécurisé HTTP
- étendu à d'autres services ( SMTP, LDAP, VPN, etc ...)
SSL dans le modèle TCP/IP
- 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)
- 1.0 par Netscape en 1994, pas de public release
- 2.0 par Netscape en Février 1995, (trous de sécurité) The SSL Protocol Version 2.0
- 3.0 par Netscape en Novembre 1996, The SSL Protocol Version 3.0
Versions TLS (Transport Layer Security)
- TLS 1.0 = SSL 3.1 IETF
- 1.0 released en janvier 1999, RFC 2246
- 1.1 released en Avril 2006, RFC 4346
- 1.2 released en Août 2008, RFC 5246
Connexion SSL/TLS (exemple : HTTPS)
1.Le serveur
- 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) 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
La suite de la communication est chiffré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
- mais le serveur n’a aucune information sur le client
-
Les paramètres de chiffrements
- sont négociés et « jetables »
[slide55] mais reprendre les miens détaillé les étapes
4 sous-protocoles
-
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
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é
- pour
- propose les suites cryptographiques qu'il sait gérer
$ openssl ciphers -v
- 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
- message de type Alert
-
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
- première suite cryptographique préférée et proposée par le client
- 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?
- 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.
- This would mean that the entire key generation routine was based on client generated values
- Why not just use the pre-master?
- master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random)
Handshake - cypher suite TLS_RSA_WITH_RC4_128_MD5
-
- 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
-
ClientKeyExchange contient l'aléa chiffré que seul le serveur pourra déchiffrer
- chiffrer en utilisant la clé publique du certificat
- génération d'une pre-master secret : secret de session
- quand le client a reçu le certificat du serveur
-
RC4_128 algorithme de chiffrement RC4 avec clé de 128 bits
- pour chiffrer le canal de communication
-
- protection de l'intégrité du canal de communication via HMAC MD5
Note:
-
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.
- If a Man-In-The-Middle attacker replayed the handshake, the same pre-master secret would be sent and then used for the connection.
- This would mean that the entire key generation routine was based on client generated values
- Why not just use the pre-master?
- master_secret = PRF(pre_master_secret, "master secret", ClientHello.random + ServerHello.random)
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
- ces éléments partagés sont alors dérivés pour générer les clés symétriques utilisés par
- le pre-master secret, le ClientRandom et le ServerRandom sont connus du client et du serveur
- le client renvoie le pre-master sercet chiffré dans ClientKeyExchange
- chaîne de certification invalide
-
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
## Perfect Forward Secrecy (PFS)
-
En français : confidentialité persistante Si la clé privée du serveur est compromise, qu’en est-il des transactions passées ? La PFS introduit un ServerKeyExchange
-
obligatoire pour la certification A+ (à vérifieir et creuser les catégories de certification).
-
on voit passer que c'est du jaune
-
mais ce ne donne pas d'avanatage
-
la couleur finale est impossible à trouver même en sachant qu'elle utilise du jaune
-
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
- toutes les communications sont alors déchiffrables
- on peut obtenir les clés de session
- le pre master secret est récupérable aussi
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): la connaissance de la clé privée n'apporte pas d'avantage pour déchiffrer
- la connaissance de la clé privée n'est d'aucun intérêt
- Authentification du serveur explicite
-
ServerKeyExchange
- signature RSA
- paramètres Diffie-Hellman
- aléas (ClientRandom ou ServerRandom)
- signature RSA
-
ServerKeyExchange
- échange de clé Diffie-Hellman
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)
- le serveur initie une renégociation
-
à 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
- permet de forcé les connexions TLS à 512-bit export-grade cryptography
- Freack Attack réminiscence
-
[octobre 2014] - Poddle
-
[mars 2014] - Heartbleed
- lecture de la mémoire du serveur via un heartbeat
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
- On chiffre le message avec un algorithme symétrique et une clé aléatoire
- On chiffre cette clé n fois pour les n destinataires
- On envoie le message chiffré symétriquement et la clé partagée chiffrée pour chaque destinataire
Chaque destinataire peut déchiffrer la clé partagée avec sa clé privée et déchiffrer le message
Certificats clients
- Un client peut présenter un certificat au serveur
- Le serveur vérifie si le certificat est signé par une CA de confiance
- Le serveur peut utiliser ces informations pour authentifier l’utilisateur
- 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)
-
Devenu obligatoire le 8 septembre 2017
-
Le 9 septembre 2017, Comodo s’est fait pincer pour ne pas le respecter : Comodo Caught Breaking New CAA Standard One Day After It Went Into Effect (à vérifier masi c'est le cas ou un domaine est déjà enregistré chez un CA let's encrypt par exmple (il a l'enregsitrement) mais comodo n'en a pas tenu compte)
-
Validation par les CA
DNS-Based Authentication of Named Entities (DANE)
-
Publication du certificat dans un enregistrement TLSA du DNS, protégé par DNSSEC
-
Validation par les clients
On peut se passer des CA
HTTPS
-
HTTP + SSL/TLS = HTTPS assure
- Confidentialité
- Intégrité
- Authentification (via les certificats)
-
Open SSL
- mod_ssl
-
GnuTLS
Que "chiffre" https
- 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)
- certificats
- rarement testés par le navigateur
-
Online Certificate Status Protocol (OCSP)
- abandonner côté client en cas de certififcat révoqué
- maintenir un cache de réponse valide côté serveur
- Approche par log publique de création révocation
- Google's Certificate Transparency project
-
Online Certificate Status Protocol (OCSP)
- peut on faire confiance aux certificats valides?
- rarement testés par le navigateur
- peut on faire confiance à toutes les PKI?
- celles qui délivrent des certificats systématiquement autorité de certifications
- certificats
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
Quelques outils
- Obtenir un certificat SSL valide
- letsencrypt.org entièrement gratuit (à renouveler tous les 90 jours)
- startssl.com 1 domaine + 1 sous domaine gratuits
- gandi.net 1 domaine ou sous domaine gratuit par non de domaine acheté chez gandi
- Tester un certificat SSL
- Tester une configuration SSL
- Tester son navigateur
- Comprendre son navigateur
Note:
- aspect arbitraire de la notation notamment qualys
- méfiance quand il y aquelque chose à vendre
- SSL en fait TLS on est d'accord
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
- Apache tips
- Nginx tips
Se protéger
- Multi server tips
- https://cipherli.st/ pour une conf sécurisée
- fixer le weak Diffie-Hellmani (aka logjam Attack)
openssl dhparam -out dhparams.pem 2048
- suivre les recommandations de l'ANSSI
dans tous les cas
bien regarder la date ...
car valable jusqu'à la prochaine faille!!!
Note:
- Désactiver tout services non sécurisés
- préférer sftp à ftp, ssh à telnet ou rlogin ...