Skip to content
Snippets Groups Projects

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

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)
  • Validity 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

différences entre certificats

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

Check CERT Firfox

  • Avec son navigateur en cliquant sur le cadenas

Faire parler un certificat

Check CERT Firfox

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

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)

Known good signers

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

CA connues

CA & Firefox

Warning

CA & Chrome

Warning

Différentes causes

  • Certificat différent du nom de domaine
  • 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
  • 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

OCSP

  • si l'OCSP n'est pas disponible pour le certificat firefox accepte le certificat
    • s'il est valide

Online Certificate Status Protocol (OCSP)

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

SSL/TLS in TCP/IP model

  • Couche intermédiaire car indépendante du protocole utilisé

Versions SSL

Secure Socket Layer

Versions TLS

Transport Layer Security

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

TLS Handshake

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

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
  • 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

## 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

Diffie-Hellman exchange

Certification Authority Authorization (CAA)

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

Apache

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

Vulnérabilités multiples

Tests serveurs

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

Se protéger / Nginx

Se protéger / tout serveur

A lire