Certificate.
Garantir qu'une signature (clé publique) correspond bien à une identité donnée.
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.
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 :
java.security.cert.Certificate
, que l'on pourra interpréter (cast)
selon les cas comme des java.security.cert.X509Certificate
ou autre.Le package des certificats définit également une classe CRL permettant de représenter les listes de certificats révoqués.
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).
Des exemples de formats de certificats sont :
getEncoded()
) sera donc implémentée différemment par les
différents types de certificats (un certificat X.509 retournera un ensemble d'octets au format ASN.1/DER par exemple).
telCertificat.verify(telleClePublique)
lèvera une exception si ce n'est pas le
cas).