First par of certificates course
This commit is contained in:
parent
5dbf36087c
commit
2a3a818ee2
1 changed files with 116 additions and 0 deletions
116
content/secu_reseaux/6_certificats/index.md
Normal file
116
content/secu_reseaux/6_certificats/index.md
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
---
|
||||||
|
title: "Sécurité des réseaux : les certificats"
|
||||||
|
date: 2022-10-18
|
||||||
|
tags: ["TLS", "certificats", "PGP"]
|
||||||
|
categories: ["Sécurité des réseaux", "Cours"]
|
||||||
|
matjax: true
|
||||||
|
---
|
||||||
|
|
||||||
|
Un certificat est une pièce d'identitApé comprenant:
|
||||||
|
|
||||||
|
* une clé publique;
|
||||||
|
* un émetteur;
|
||||||
|
* des information sur le détenteur;
|
||||||
|
|
||||||
|
Le tout est signé par l'émetteur.
|
||||||
|
|
||||||
|
Lors de la réception d'un certificat, le client vérifie:
|
||||||
|
|
||||||
|
* l'autorité l'ayant signé (*Certificate Authority*)
|
||||||
|
* la validité
|
||||||
|
* l'identité
|
||||||
|
|
||||||
|
Dans le cas du CA, il est possible de se référerà une chaine de certification
|
||||||
|
(on parle alors de certificats intermédiaire.)
|
||||||
|
|
||||||
|
## La norme x509
|
||||||
|
|
||||||
|
x509 est une norme définissant les formats pour les certificats à clé publique,
|
||||||
|
leus attributs, un algorithme de validation de chemin et les liste de révocation
|
||||||
|
de certificat.
|
||||||
|
|
||||||
|
Cette norme fait parti de x500, elle repose sur une hiérarchie d'autorité de
|
||||||
|
certification et la **cryptographie asymétrique** (clé publique / clé privée)
|
||||||
|
|
||||||
|
## Anatomie d'un certificat
|
||||||
|
|
||||||
|
Un certificat se compose des élémemts suivants:
|
||||||
|
|
||||||
|
* la **version** du format de certificat
|
||||||
|
* un **numéro de série** unique pour l'autorité émettrice
|
||||||
|
* **identifiant de l'algorithme de chiffrement** utilisé
|
||||||
|
* **nom de l'émetteur** qui est donc celui de l'autorité de certification
|
||||||
|
* une **période de validité** composé d'une date de début et une date de fin
|
||||||
|
* **nom du sujet** qui peut être un nom d'utilisateur ou un sujet plus
|
||||||
|
complexe respectant la norme x500
|
||||||
|
* **clé publique du sujet** ainsi que l'algorithme utilisé
|
||||||
|
* **identifiant unique de l'émetteur**, c'est un élément facultatif qui permet
|
||||||
|
d'identifier sans ambiguïté l'autorité de certification émettrice.
|
||||||
|
* **identifiant unique du sujet** élément facultatif qui permet d'identifier
|
||||||
|
sans ambiguïté le sujet du certificat
|
||||||
|
* un ensemble de champs permettant d'ajouter des **extensions**
|
||||||
|
* enfin la **signature** qui couvre tous les autres champs du certificat : ce
|
||||||
|
champ contient le code de *hachage* de ces champs chiffrés avec la clé privée
|
||||||
|
de l'autorité de certification.
|
||||||
|
|
||||||
|
La notation suivante est utilisée:
|
||||||
|
|
||||||
|
\\[ CA << A >> = CA{V,SN,AI,CA,TA,A,Ap }\\]
|
||||||
|
|
||||||
|
Dans cette notation, \\(CA << A >>\\) est le certificat de \\(A\\) émis par
|
||||||
|
\\(CA\\) et \\(CA{SN}\\) représente la signature de \\(SN\\) par \\(CA\\)
|
||||||
|
|
||||||
|
L'autorité de certification **signe** le certificat **avec sa clé privée**. Si
|
||||||
|
l'utilisateur détiens la clé publique correspondante dans son magasin de
|
||||||
|
certificat, il pourra alors vérifier la validité.
|
||||||
|
|
||||||
|
## Sécuriser les certificats et leurs chaînes
|
||||||
|
|
||||||
|
Lorsqu'un utilisateur reçoit un certificat depuis un serveur, il doit s'assurer
|
||||||
|
que celui-ci est le bon.
|
||||||
|
|
||||||
|
|
||||||
|
### HPKP - certificate pinning
|
||||||
|
|
||||||
|
Comme pour le *SSH*, il peu mémoriser son empreinte lors de la première
|
||||||
|
connexion. Il peut utiliser *HPKP* -- **HTTP Public Key Pinning** -- pour la
|
||||||
|
mémoriser, le tout couplé à *HSTS* -- HTTP Strict Transport Security.
|
||||||
|
|
||||||
|
Mais celle solution est loi d'être parfaite : quid du changement de certificat.
|
||||||
|
En plus l'attaquant pourrait être présent dès la première connexion.
|
||||||
|
|
||||||
|
### Certificate transparency
|
||||||
|
|
||||||
|
C'est une solution poussée par Google. Il reprend en quelque sorte le principe
|
||||||
|
du *HPKP* en l'améliorant.
|
||||||
|
|
||||||
|
Dès qu'une autorité de certification émet un certificat, elle envoie un
|
||||||
|
condensat de celui-ci sur un dépôt public contrôlé par un tiers (Google en
|
||||||
|
fait). Le client peut **demander au dépôt** la validité du certificat.
|
||||||
|
|
||||||
|
Problème ici : les dépôts (Google donc) deviennent tout puissant en concentrant
|
||||||
|
les pouvoirs. Ils pourraient par exemple refuser d'ajouter les certificats
|
||||||
|
venant de telle autorité ou portant sur tel sujet.
|
||||||
|
|
||||||
|
### Certificat Autority Authorization
|
||||||
|
|
||||||
|
Ce mécanisme prend la forme d'un enregistrement DNS `CAA` donnant **la liste des
|
||||||
|
autorité de certification** pouvant émettre des certificat pour la zone.
|
||||||
|
|
||||||
|
Cette protection est donc sensible aux attaque sur le DNS.
|
||||||
|
|
||||||
|
### DANE -- DNS-based Authentication of Named Entities
|
||||||
|
|
||||||
|
Contrairement à *Certificate Transparency* ou la sécurité est déléguée à un
|
||||||
|
tiers, avec *DANE* (et *DNSSEC) on en prend le contrôle. *DANE* dépends de
|
||||||
|
*DNSSEC* qui se révèle compliqué à implémenter (et administrer).
|
||||||
|
|
||||||
|
*DANE* permet de se passer d'autorité de certification.
|
||||||
|
|
||||||
|
### DoH, DoT
|
||||||
|
|
||||||
|
Ces deux mécanismes permettent de sécuriser le protocole DNS en le passant sur
|
||||||
|
du HTTPS (*DNS over HTTPS*) ou en l'en capsulant dans TLS (*DNS over TLS*).
|
||||||
|
|
||||||
|
Les certificats assurent deux propriétés: l'autentification du résolveur qui
|
||||||
|
répond et le chiffrement des messages.
|
Loading…
Add table
Add a link
Reference in a new issue