Certificat

Certificate.

Besoin

Garantir qu'une signature (clé publique) correspond bien à une identité donnée.

Analyse

De la même manière que la signature sur votre carte d'identité est certifiée par la mairie qui vous l'a remise, et que le tampon de la mairie est certifié par l'état, etc. un certificat contient une clé publique certifiée par quelqu'un d'autre, lui-même certifié par un autre, etc. jusqu'à parvenir à la clé publique d'un auteur dont l'identité est incontestable : une CA.

Implémentation

Dans Java, la manipulation des certificats relève du package java.security.cert [1.2+]. Ce package définit la classe abstraite Certificate, dont doivent dériver les classes représentant des types particuliers de certificats (par exemple java.security.cert.X509Certificate). On pourra par alors demander à la fabrique de certificats (java.security.cert.CertificateFactory) d'un fournisseur donné d'instancier un certificat à partir :

Le package des certificats définit également une classe CRL permettant de représenter les listes de certificats révoqués.

X.509

En l'occurrence Java ne définit qu'un type particulier de certificat, le X.509, largement utilisé par la plupart des protocoles. Il est représenté par la classe java.security.cert.X509Certificate. Cette classe n'est cependant pas jamais instanciée, et dérivable par différents fournisseurs souhaitant fournir une implémentation de certificats X.509.

Afin de pouvoir valider d'autres certificats, la plate-forme Java [1.2+] (JDK ou JRE/plugin) inclut — comme les navigateurs — une liste de certificats identifiant au moins une CA, en l'occurence Verisign.

Cette base de certificats "racines" se trouve dans une base de clés (KeyStore) de nom cacerts, située dans le sous-répertoire lib/security/ de la plate-forme. Dans un premier temps, il est peu probable que vous ayez a accéder à cette base. Cependant, il est recommandé de changer son mot de passe par défaut (changeit) afin d'éviter que quelqu'un ne remplace à votre insu les certificats de confiance installés sur votre machine.

La génération d'un tel certificat s'effectue via l'option -genkey de keytool. Sont alors stockées dans la base de clés (%HOME%\.keystore par défaut) une nouvelle clé privée et une nouvelle clé publique associée, ainsi qu'un certificat (X.509 v1 uniquement pour l'instant) auto-signé certifiant la valeur de sa propre clé-publique. A chacune de ces identités générées est associé un alias qui peut être spécifié à keytool (mykey par défaut). Par exemple :

keytool -genkey -alias javarome

Cette génération nécessite diverses informations fournies par le certifié (nom, prénom, localité, compagnie, département, état, pays) nécessaire à la définition X.500 du nom du certifié (Distinguished Name).

Exemples

Des exemples de formats de certificats sont :

Notes