Spécification du couplage de LDAP et DNSsec pour la publication
de clés publiques
Version 4
Auteurs : Maryline Maknavicius-Laurent, Francis Dupont
Date : octobre 2003
URL : http://www-lor.int-evry.fr/~maknavic/CADDISC/
1. Le nommage dans CADDISC
Le domaine enst.idsa.prd.fr bénéficiant des fonctionnalités
DNSsec et étant donc signé, il apparaît intéressant
que les écoles du GET soient rattachées à ce domaine
là, comme suit :
- INT : int-evry.caddisc.enst.idsa.prd.fr
- ENST de Bretagne : enst-bretagne.caddisc.enst.idsa.prd.fr
- ENIC : enic.caddisc.enst.idsa.prd.fr
- ENST : enst.caddisc.enst.idsa.prd.fr
Par la suite, nous prenons l'exemple de l'INT et la notation suivante
:
'int-evry.DNSsec'='int-evry.caddisc.enst.idsa.prd.fr'
2. Le schéma de certification
Pour des raisons pratiques, nous considérons que l'INT dispose d'une
seule CA (INT root CA) qui a son certificat enregistré dans le serveur
int-evry.DNSsec et l'annuaire LDAP de l'INT. Il est tout à fait
possible et même recommandé d'avoir une hiérarchie
de CA à deux niveaux : un CA racine et un autre CA de classe 1 (INT
class1 CA) habilité par le CA racine à gérer les certificats
du personnel de l'INT. Pour des raisons d'ordre pratique, pour éviter
de devoir gérer plusieurs logiciels OpenCA, nous avons opté
pour une seule CA. Notez que le certificat de classe 1 devrait alors être
enregistré dans l'annuaire LDAP uniquement. Les certificats à
utiliser sont présentés dans l'annexe 1.
Le CA racine gère ici l'ensemble des certificats des personnels
et machines de l'INT. Pour assurer un chemin de certification continu entre
DNSsec et LDAP, il faut veiller au contenu des champs issuerAltName et
subjectAltName des certificats qui doivent identifier l'annuaire de publication
des certificats du CA et du détenteur.
Le contenu des bases DNSsec et LDAP est donné ci-dessous, mais
uniquement pour les aspects certificat :
- le serveur DNSsec de l'INT :
Le certificat du CA racine de l'INT dans un CERT RR avec nom de domaine
int-evry.DNSsec
Le certificat du CA racine contient :
issuer : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
subjectAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
- le serveur LDAP de l'INT :
Le certificat du CA racine
Le certificat de l'utilisateur contient :
issuer : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=userName,ou=PKI,o=INT, c=FR
subjectAltName : userName@int-evry.fr (rfc822Mailbox)
cRLDistributionPoint : URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?certificateRevocationList?
Figure 1 : Base LDAP de l'INT
Noter que les chemins des entrées dans l'exemple ci-dessus sont
tout à fait indicatifs, l'essentiel étant de faire apparaître
le bon chemin dans les champs issuerAltName, subjectAltName, et cRLDistributionPoint
des certificats.
3. La base LDAP
Il n'est pas important que les certificats du personnel/machine soient
disponibles dans un chemin particulier de la base. La recherche LDAP pourra
être étendue à l'arbre entier.
Logiquement l'entrée définie par c=FR,o=INT,ou=PKI de
la classe pkiUser pourra comprendre un sous-arbre contenant les certificats
du personnel et des machines (e.g. serveur SCVP , serveur web). Dans ce
sous-arbre, l'entrée c=FR,o=INT,ou=PKI,cn=user correspondra à
un utilisateur du site et comprendra l'ensemble des certificats de cet
utilisateur, le domaine d'application de ces certificats étant précisé
dans le certificat (champ KeyUsage). De la même façon, l'entrée
c=FR,o=INT,ou=PKI,cn=machine correspondra à une machine du site
et comprendra les certificats associés à cette machine.
L'entrée définie par c=FR,o=INT,ou=PKI-CA,cn=CADDISC
INT root CA pourra comprendre les certificats de l'autorité CA racine.
4. Le protocole SCVP
Le protocole SCVP (Simple Certificate Validation Protocol) (draft-ietf-pkix-scvp-12)
permet à une application intégrant un client SCVP de vérifier
la validité d'un certificat et la chaîne de certification
en interrogeant un serveur SCVP.
La requête SCVP peut comprendre les certificats à vérifier
et la réponse SCVP, les statuts de ces certificats ainsi qu'une
signature portant sur la réponse. La signature peut être générée
par le responder SCVP dont la clé est certifiée par le CA
racine. Le certificat du responder SCVP doit préciser sa fonction
de responder SCVP dans le champ extKeyUsageSyntax de son certificat.
Le certificat du serveur SCVP contient :
issuer : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=INT SCVP responder,ou=PKI,o=INT,c=FR
subjectAltName : URI:ldap://pivert.int-evry.fr:9009/cn=pivert.int-evry.fr,ou=PKI,o=INT,c=FR?userCertificate?
cRLDistributionPoint : URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?certificateRevocationList?
extKeyUsageSyntax : id-kp-SCVPSigning # vraisemblablement,
étant donné que SCVP n'est pas encore standardisé
5. L'architecture retenue pour la vérification des certificats
Les efforts de développements de CADDISC portent sur le serveur
SCVP. Ainsi la vérification des certificats sera faite de façon
centralisée. Le serveur SCVP intègre un client DNSsec et
un client LDAP. Suivant les certificats à charger, le serveur LDAP
ou le resolver DNSsec sera interrogé.
Figure 2 : Architecture SCVP
6. La vérification de certificats
Le responder SCVP vérifie d’abord que le certificat ne fait pas
partie d’une liste de révocation de certificats (CRL). Pour cela,
il va chercher la liste CRL dans la base LDAP à l’adresse à
l'adresse URI mentionnée dans le champ cRLDistributionPoint du certificat.
Ensuite, le serveur effectue la vérification de certificats
en deux phases, une phase ascendante pour récupérer les certificats
et une phase descendante de vérification des signatures. Dans la
phase ascendante, deux étapes sont nécessaires. Tout d’abord,
le serveur SCVP remonte la chaîne de confiance depuis le certificat
à vérifier jusqu’au CA racine en faisant appel à LDAP.
Puis il passe le relais à un resolver DNSsec qui va lui retourner
un certificat vérifié au sens de DNSsec. Il n’aura plus qu’à
vérifier que ce certificat est le bon. Enfin, il n’aura plus qu’à
vérifier les signatures des certificats.
7. D'autres applications possibles de CADDISC
Certaines applications ne transportent pas de certificats mais se contentent
de donner une référence, comme IKEv2 (draft 5) de la suite
IPsec. Pour ces applications, les certificats doivent être publiés
dans des annuaires accessibles.
8. Langage de programmation
La programmation du serveur SCVP se fera en C comme les développement
DNSsec de l'ENST de Bretagne.
9. Références
Maryline
Maknavicius-Laurent, Michel Gardie, " LDAP et la certification ", Version
2.1, SP1.1 du projet CADDISC, février 2003.
Francis
Dupont, " DNSsec et la certification ", Version 1, SP1.2 du projet CADDISC,
février 2003.
M. Myers, R. Ankney, A. Malpani, S. Galperin, C. Adams, " X.509 Internet
Public Key Infrastructure Online Certificate Status Protocol - OCSP ",
rfc 2560, June 1999.
R. Housley, W. Ford, W. Polk, D. Solo, " Internet X.509 Public Key
Infrastructure Certificate and CRL Profile ", rfc2459, January 1999
T. Howes, M. Smith, " The LDAP URL Format ", rfc 2255, December 1997.
C. Kaufman, " Internet Key Exchange (IKEv2) Protocol ", draft-ietf-ipsec-ikev2-05.txt,
February 2003.
R. Housley, W. Polk, W. Ford, D. Solo, " Internet X.509 Public Key
Infrastructure: Certificate and Certificate Revocation List (CRL) Profile
", rfc 3280, April 2002.
Paul Albitz, Cricket Liu, " DNS et Bind ", 4e édition, O'Reilly,
ISBN : 2-84177-150-4, janvier 2002, pp. 486.
A. Malpani, R. Housley, T. Freeman, "Simple Certificate Validation
Protocol (SCVP) ", draft-ietf-pkix-scvp-12.txt, June 2003.
Annexe 1 : Les certificats dans le cas d'une hiérarchie de CA à
2 niveaux
Le certificat du CA racine contient :
issuer : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
subjectAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
- le serveur LDAP de l'INT :
Le certificat du CA racine
Le certificat du CA de classe 1 contient :
issuer : cn=CADDISC INT root CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=CADDISC INT Class 1 CA,ou=PKI-CA,o=INT,c=FR
subjectAltName : URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT Class 1 CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
cRLDistributionPoint : URI:ldap://pivert.int-evry.fr/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?certificateRevocationList?
Le certificat de l'utilisateur contient :
issuer : cn=CADDISC INT class 1 CA,ou=PKI-CA,o=INT,c=FR
issuerAltName : DNS:int-evry.DNSsec, URI:ldap://pivert.int-evry.fr:9009/cn=CADDISC
INT root CA,ou=PKI-CA,o=INT,c=FR?cACertificate?
subject : cn=userName,ou=PKI,o=INT, c=FR
subjectAltName : userName@int-evry.fr (rfc822Mailbox)
cRLDistributionPoint : URI:ldap://pivert.int-evry.fr/cn=CADDISC
INT class 1 CA,ou=PKI-CA,o=INT,c=FR?certificateRevocationList?
Annexe 2 : La certification au GET
On suppose que les écoles du GET disposent chacune d'un CA racine
et d'une hiérarchie de CA en interne. Dans ce rapport, un seul CA
est défini sous l'autorité du CA racine, mais il n'y a aucune
contre-indication pour qu'une hiérarchie de CA à plusieurs
niveaux soit définie. Le chemin de certification sera plus long
et donc le responder SCVP devra vérifier un plus grand nombre de
certificats.
Figure 3 : Organisation des CA au GET
Annexe 3 : Un certificat pour le serveur LDAP ?
Pour la publication de certificats, le serveur LDAP n'a pas besoin de posséder
de clés publiques/privées. Le certificat garantit à
lui seul la sécurité de son contenu. Par contre, pour la
publication d'autres types d'informations (e.g. relatives au personnel...),
il est intéressant que le serveur LDAP dispose d'un certificat (c=FR,
o=INT, cn=rootDSE). Cela lui permettra d'assurer l'authenticité
et l'intégrité des informations publiées.