- 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
- Certificat auto-signé
- Faire parler un certificat
- Faire parler un certificat
- Faire parler un certificat
- Autorité de certificaiton (CA)
- Autorité de certificaiton (CA)
- Known good signers
- Root CA
- Chain of trust
- CA connues
- CA & Firefox
- CA & Chrome
- Différentes causes
- Certificate Sign Request
- (CSR)
- Création d'un certificat à partir d'un CSR
- Vérification de la signature
- Signer un fichier
- Certificate Revocation List (CRL)
- Certificate Revocation List (CRL)
- Revocation reason
- Online Certificate Status Protocol (OCSP)
- Online Certificate Status Protocol (OCSP)
- SSL / TLS
- TLS dans le modèle TCP/IP
- Versions SSL
- Versions TLS
- Cypher suite
- TLS_RSA_WITH_RC4_128_MD5
- clienthello
- Réponse serveur
- Négociation de la suite cryptographique
- Fin de négociation
- Fin de négociation
- Fin de négociation
- Connexion SSL/TLS
- Certificats clients
- Vulnérabilité TLS_RSA_WITH_RC4_128_MD5
- Certification Authority Authorization (CAA)
- DNS-Based Authentication of Named Entities (DANE)
- HTTPS
- Apache
- Que "chiffre" https
- Vulnérabilités multiples
- Vulnérabilités multiples
- Tests serveurs
- Tests navigateurs
- Se protéger
- Se protéger / Apache
- Se protéger / Nginx
- Se protéger / tout serveur
- A lire
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=m4z3.me'
$ cat ca.crt
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIJAM4FANszQweWMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
BAMMC2V4YW1wbGUuY29tMB4XDTE3MTAzMTExMzEzNFoXDTE3MTEzMDExMzEzNFow
Certificat auto-signé
- Issuer et Subject identiques
- Tout le monde peut en fabriquer
- Rejetés par défaut par les navigateurs
Faire parler un certificat
local
$ openssl x509 -text -noout -in ca.crt
distant
$ openssl s_client -connect isima.fr:443 -showcerts -servername isima.fr
usage du certificat
$ openssl x509 -purpose -in ca.crt -inform PEM
Faire parler un certificat
- Avec son navigateur en cliquant sur le cadenas
Faire parler un certificat
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?
- être importée dans les navigateurs
- payer (le navigateur)
- importées par défaut dans le navigateur
Known good signers
Root CA
Certificat racine
- Clés publiques non signées, ou auto-signées
- le sommet de la pyramide de confiance
- un certificat est rarement signé par une CA racine
- la CA racine créée plusieurs CA intermédiaires
- sous scellés / déconnectés / sortis (autre CA)
- auto signé
DigiCert Trusted Root Authority Certificates
Chain of trust
Chaînes de certification
- 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
CA connues
- digicert
- Comodo
- ...
- Gratuites
- StartSSL free
- CAcert (not known good signers)
- Let's Encrypt fondé par l'EFF et Mozilla
CA & Firefox
CA & Chrome
Différentes causes
- Certificat différent du nom de domaine
- wildcard
- Certificats expirés
- CA non importée
- ...
Certificate Sign Request
(CSR)
$ openssl req -new -newkey rsa:2048 -sha256 \
-nodes -out user.csr -keyout user.key \
-subj '/CN=example.com'
- Générer un requête de certification
- Un CSR est auto-signé (pour vérifier l'intégrité)
$ openssl req -in user.csr -text -noout
- Lire le CSR
$ openssl req -text -noout -verify -in user.csr
- Vérifier le CSR
Création d'un certificat à partir d'un CSR
$ openssl x509 -req -days 365 \
-CA ca.crt -CAkey ca.key \
-CAcreateserial -CAserial serial \
-in user.csr -out user.crt \
- Génèrer un certificat à partir d'un CSR
- la CA vérifie qu'elle gère le domaine
- la CA ajoute quelques informations
- la CA signe avec sa clé privée
- la CA protège sa clé privée
note:
Vérification de la signature
$ openssl verify -CAfile ca.crt user.crt
user.crt: OK
$ openssl x509 -text -noout -in user.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
f0:61:f4:c1:96:86:21:07
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=m4z3.me
Validity
Not Before: Jan 18 17:27:54 2018 GMT
Not After : Jan 18 17:27:54 2019 GMT
Subject: CN=example.com
note:
Signer un fichier
Sign and verify text files to public keys via the OpenSSL Command Line
Certificate Revocation List (CRL)
Révocation de certificats
- Contient une liste de certificats valides à révoquer
- utile en cas de compromission / décommissionnement
- informer la CA
- la CA ajoute le certificat à sa liste de certificats révoqués
- cette liste est signée par la CA
- utile en cas de compromission / décommissionnement
- Souvent la clé qui signe les certificats signe les CRL
- Quand que le navigateur interroge-t-il les CRL ?
Certificate Revocation List (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
note:
- next update parce que CRL delta
Revocation reason
- unspecified (0)
- keyCompromise (1)
- CACompromise (2)
- affiliationChanged (3)
- superseded (4)
- cessationOfOperation (5)
- certificateHold (6)
- removeFromCRL (8)
- privilegeWithdrawn (9)
- AACompromise (10)
Online Certificate Status Protocol (OCSP)
Protocole d’interrogation de validité pour un certificat
- si l'OCSP n'est pas disponible pour le certificat firefox accepte le certificat
- s'il est valide
Online Certificate Status Protocol (OCSP)
- Peu déployé
- Approche par log publique de création révocation
- Google's Certificate Transparency project
SSL / TLS
- Crée un canal de communication authentifié, protégé en confidentialité et en intégrité
- Utilise des certificats X.509
- délivrés par des CA
- Utilise un système de chiffrement asymétrique
- pour échanger une clé pour le chiffrement symétrique
- Protocole initialement pensé pour sécurisé HTTP
- étendu à d'autres services (SMTP, LDAP, VPN, ...)
TLS dans le modèle TCP/IP
- Couche intermédiaire car indépendante du protocole utilisé
Versions SSL
Secure Socket Layer
- 1.0 par Netscape en 1994, pas de public release
- 2.0 par Netscape en Février 1995, The SSL Protocol Version 2.0
- 3.0 par Netscape en Novembre 1996, The SSL Protocol Version 3.0
Versions TLS
Transport Layer Security
-
1.0 released en janvier 1999, RFC 2246
- TLS 1.0 = SSL 3.1 IETF
- 1.1 released en Avril 2006, RFC 4346
- 1.2 released en Août 2008, RFC 5246
Cypher suite
Suite cryptographique
- échange de clés
- authentification des parties
- chiffrer les données applicatives
- protéger les données applicatives en intégrité (MAC)
Cipher suites gérées par un système
$ openssl ciphers -v
TLS_RSA_WITH_RC4_128_MD5
Se lit
-
RSA
- authentification du serveur
- RC4_128 = algorithme de chiffrement RC4 avec clé de 128 bits
- pour chiffrer le canal de communication
-
MD5
- protection de l'intégrité du canal de communication via HMAC MD5
clienthello
Le client
- envoie les suites cryptographiques qu'il est capable de mettre en oeuvre
Réponse serveur
Le serveur
- Si aucune suite n'est satisfaisante
- Alert fin de connexion
- Sinon
- ServerHello suite cryptographique choisie
- ServerRandom valeur aléatoire (publique)
- Certificate certificat du serveur
- ServerHelloDone indiquant qu'il est attente d'une réponse du client
Négociation de la suite cryptographique
- Tous les serveurs web ne négocient pas les cypher suites de la même façon
- IIS prend la première suite cryptographique préférée du serveur et proposée par le client
-
Apache prend la première suite proposée par le client et supportée par le serveur
- permet une baisse du niveau de sécurité
- SSLHonorCipherOrder pour sécuriser
SSL / TLS Renegotiation Handshakes MiTM Plaintext Data Injection- medium or low risk?
Fin de négociation
Le client
- Vérifie la validité du certificat
- Génère une clé de chiffrement symétrique
- secret partagé ou pre master secret
- Chiffre le secret partagé avec la clé publique du serveur
Fin de négociation
Le client envoie au serveur
- ClientKeyExchange le secret partagé chiffré
- ChangeCipherSpec paramètres pour la suite cryptographique choisie
-
Finished fin de négociation
- premier message chiffré symétriquement
- avec secret partagé et ServerRandom
- premier message chiffré symétriquement
Fin de négociation
Le serveur
- Reçoit le secret partagé chiffré généré par le client
- Déchiffre le secret partagé avec sa clé privée
- ChangeCipherSpec paramètres pour la suite cryptographique choisie
- Finished fin de négociation
#### La suite de la communication est chiffrée symétriquement
Connexion SSL/TLS
-
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 »
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), ...
Vulnérabilité TLS_RSA_WITH_RC4_128_MD5
- si la clé privée du serveur est récupérée
- le secret partagé est récupérable
- 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 secret partagé est récupérable
## Perfect Forward Secrecy (PFS)
Confidentialité Persistante
- La clé compromission d'un clé privée n'affecte pas la confidentialité des communications passées
- utilisée uniquement pour signer
- Problème NP-complet
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
Note:
- cas où un domaine est déjà enregistré chez un CA (let's encrypt)
- et qu'une autre CA lui délivre un certificat
- Comodo n'en a pas tenu compte
DNS-Based Authentication of Named Entities (DANE)
-
Publication du certificat dans un enregistrement TLSA du DNS, protégé par DNSSEC
-
Validation par les clients
HTTPS
- HTTP + SSL/TLS = HTTPS assure
- Confidentialité
- Intégrité
- Authentification (via les certificats)
Apache
-
Open SSL
- mod_ssl
- GnuTLS
Que "chiffre" https
- On ne voit pas l'url dans le traffic
- on voit l'ip de l'hôte
- on voit ventuellement les requêtes DNS
- Proxy https ou VPN anonymisent 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
Vulnérabilités multiples
- [2015] Weak Diffie-Hellman and the Logjam Attack
- permet de forcé les connexions TLS à 512-bit export-grade cryptography
- Freack Attack réminiscence
- [2014] Poddle
- [2014] Heartbleed
- lecture de la mémoire du serveur via un heartbeat
Vulnérabilités multiples
Tests serveurs
-
Tester un certificat SSL
-
Tester une configuration SSL
Tests navigateurs
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
- un service sans s est un problème
- pas ftp, mais sftp ou ftps
- pas rsync, mais rsync over sssh
- pas imap, pop3 et smtp, mais imaps, pop3s et smtps
- 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
Se protéger / Apache
- Chiffrement fort SSL/TLS : Mode d'emploi
- Hardening Your Web Server’s SSL Ciphers
- ssllabs.com's own Apache SSL Config Directives
- Apache web server SSL best practices
Se protéger / Nginx
Se protéger / tout serveur
-
https://cipherli.st/ pour une conf sécurisée
-
fixer le weak Diffie-Hellman (aka logjam Attack)
openssl dhparam -out dhparams.pem 2048
-
suivre les recommandations de l'ANSSI