jan 23 2008
Cryptographie java, les certificats X509
Bon pour ce soir on vas voir la création de certificats X509 et leur sauvegarde dans un keystore.
wikipedia : Un certificat électronique est une carte d’identité numérique dont l’objet est d’identifier une entité physique ou non-physique. Le certificat numérique ou électronique est un lien entre l’entité physique et l’entité numérique (Virtuel). L’autorité de certification fait foi de tiers de confiance et atteste du lien entre l’identité physique et l’entité numérique. Le standard le plus utilisé pour la création des certificats numérique est le X.509.
Il existe 4 types de certificats en fonction du niveau de sécurité:
- classe 1: adresse e-mail du demandeur requise;
- classe 2: preuve de l’identité requise (photocopie de carte d’identité par exemple);
- classe 3: présentation physique du demandeur obligatoire.
- classe 3+: identique à la classe 3, mais le certificat est stocké sur un support physique (clé USB à puce, ou carte à puce; exclut donc les certificats logiciels)
Tel qu’on l’utilise en cryptographie et en sécurité informatique, un certificat électronique est un bloc de données contenant, dans un format spécifié, les parties suivantes :
- un numéro de série;
- l’identification de l’algorithme de signature;
- la désignation de l’autorité de certification émettrice du certificat;
- la période de validité au-delà de laquelle il sera suspendu ou révoqué;
- le nom du titulaire de la clé publique;
- l’identification de l’algorithme de chiffrement et la valeur de la clé publique constitué d’une paire de clés asymétriques (comme par exemple RSA);
- des informations complémentaires optionnelles;
- l’identification de l’algorithme de signature et la valeur de la signature numérique.
Voila pour la définition, il faut savoir qu’au sein du kesytore nous pouvons stocker un certificat avec sa clef publique et y associer sa clef privé afin de pouvoir l’exploiter dans le cadre de la signature électronique ou de l’encryption de documents.
Il est important de noter aussi qu’en fonction de l’usage prévu pour un certificat (horodatage, signature de code, authentification server, email etc…) il est nécessaire de le spécifier, voir exemple 4 de cet article -> création d’un certificat permettant la création de jeton d’horodatage.
Nous allons donc créer notre paire de clefs public / privé, notre certificat et l’ajouter à notre keystore
1 Création de la paire de clefs
public static KeyPair generateKeyPair() throws CryptoException
{
try {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
keyPairGen.initialize(2048, rand);
KeyPair keyPair = keyPairGen.generateKeyPair();
return keyPair;
}
catch (NoSuchAlgorithmException ex) {
throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
}
catch (InvalidParameterException ex) {
throw new CryptoException("Probleme lors de la création de la pair de clef : "+ex.getMessage());
}
}
2 Creation du certificat de type X509 V1



