Exemple: Développement d'une classe de génération de clé ou de paire de clés pour la génération de clés automatisée

Une classe qui génère des clés pour les opérations cryptographiques peut être créée automatiquement. Ainsi, l'infrastructure de gestion de clés peut entretenir une liste de clés pour un jeu de clés prédéfini et des applications peuvent accéder à ces clés.

Vous pouvez programmer un nouvelle génération de clés selon des fréquences prédéfinies. Souvenez-vous qu'une fréquence de génération de clés affecte la sécurité de vos données. Par exemple, pour des données rémanentes, vous pouvez programmer une génération de clés moins fréquente que pour les communications en temps réel qui nécessitent que les clés soient générées plus souvent puisque les anciennes clés arrivent à expiration.

Lorsque vous développez une classe de génération de clés, choisissez entre la création d'une clé partagée ou d'une paire de clés, cette décision déterminant l'interface que vous devez utiliser.

Si vous développez des clés partagées, reportez-vous à l'exemple suivant qui utilise la classe KeyGenerator pour implémenter l'interface com.ibm.websphere.crypto.KeyGenerator. L'interface renvoie une clé java.security.Key qui est stockée en temps que SecretKey dans un type de fichier de clés JCEKS. Vous pouvez utiliser tout autre type de fichier de clés prenant en charge le stockage de clés secrètes.

package com.ibm.test;

import java.util.*;
import com.ibm.ws.ssl.core.*;
import com.ibm.ws.ssl.config.*;
import com.ibm.websphere.crypto.KeyException;

public class KeyGenerator implements com.ibm.websphere.crypto.KeyGenerator
{
    private java.util.Properties customProperties = null;
    private java.security.Key secretKey = null;

    public KeyGenerator()
    {
    }

     /**
      * Cette méthode est appelée pour transmettre toutes propriétés personnalisées configurées avec
      * le KeySet pour l'implémentation de cette interface.
      *
      * @param java.util.Properties
      **/
    public void init (java.util.Properties customProps)
    {
        customProperties = customProps;
    }

     /**
      * Cette méthode est appelée chaque fois qu'une clé doit être générée depuis le planning
      * ou demandée manuellement. La clé est stockée dans le 
      * KeyStore référencé par le KeySet configuré qui contient 
      * la keyGenerationClass implémentant cette interface. L'implémentation de 
      * cette interface gère le type de clés. L'utilisateur du KeySet doit connaître le type 
      * qui est renvoyé par cette keyGenerationClass.
      *
      * @return java.security.Key
      * @throws com.ibm.websphere.crypto.KeyException
      **/
    public java.security.Key generateKey () throws KeyException
    {
        try
        {
            // Suppose que generate3DESKey est présent pour créer la clé.
            byte[] tripleDESKey = generate3DESKey();
            secretKey = new javax.crypto.spec.SecretKeySpec(tripleDESKey, 0, 24, "3DES");
            
            if (secretKey != null)
            {
                return secretKey;
            }
            else
            {
                throw new com.ibm.websphere.crypto.KeyException ("Key could not be generated.");
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();  // handle exception
        }
    }
}

Si vous développez une paire de clés, reportez-vous à l'exemple suivant qui utilise la classe KeyPairGenerator pour implémenter l'interface com.ibm.websphere.crypto.KeyPairGenerator.

package com.ibm.test;

import java.util.*;
import javax.crypto.spec.SecretKeySpec;
import com.ibm.websphere.crypto.KeyException;

/**
 * Cette implémentation définit la méthode pour générer une java.security.KeyPair.  
 * Quand une classe keyGeneration implémente cette méthode, la méthode generateKeyPair
 * est appelée et une KeyPair est stockée dans le fichier de clés. L'attribut isKeyPair
 * est ignoré puisque la KeyGenerationClass est une
 * implémentation de KeyPairGenerator. Les attributs isKeyPair sont utilisés lorsque les clés existent déjà dans un
 * Keystore et sont simplement lues
 * (sans les générer).
 * 
 * @author IBM Corporation
 * @version WebSphere
Application Server 6.1
 * @since WebSphere
Application Server 6.1
 **/
public class KeyPairGenerator implements com.ibm.websphere.crypto.KeyPairGenerator
{
    private java.util.Properties customProperties = null;

    public KeyPairGenerator()
    {
    }

     /**
      * Cette méthode est appelée pour transmettre toutes propriétés personnalisées configurées avec
      * le KeySet pour l'implémentation de cette interface.
     *
      * @param java.util.Properties
      **/
    public void init (java.util.Properties customProps)
    {
        customProperties = customProps;
    }

     /**
     * Cette méthode est appelée chaque fois qu'une clé doit être générée depuis le planning
      * ou demandée manuellement et que isKeyPair=true dans la configuration
      * KeySet. La clé est conservée dans le KeyStore référencé par 
      * le KeySet configuré qui contient la keyGenerationClass implémentant 
      * cette interface. L'implémentation de cette interface gère le 
      * type de clé. L'utilisateur du KeySet doit connaître le type qui 
      * est renvoyé par cette keyGenerationClass.
      *
      * @return com.ibm.websphere.crypto.KeyPair
      * @throws com.ibm.websphere.crypto.KeyException
      **/
    public com.ibm.websphere.crypto.KeyPair generateKeyPair () throws KeyException
    {
        try
        {
            java.security.KeyPair keyPair = generateKeyPair();
            
            // Stocke en tant que SecretKeySpec
            if (keyPair != null)
            {
                java.security.PrivateKey privKey = keyPair.getPrivate();
                java.security.PublicKey pubKey = keyPair.getPublic();

                SecretKeySpec publicKeyAsSecretKey = new SecretKeySpec (pubKey.getEncoded(), "RSA_PUBLIC");
                SecretKeySpec privateKeyAsSecretKey = new SecretKeySpec (privKey.getEncoded(), "RSA_PRIVATE");

                com.ibm.websphere.crypto.KeyPair pair = new 	
				com.ibm.websphere.crypto.KeyPair(publicKeyAsSecretKey, privateKeyAsSecretKey);
                return pair;
            }
            else
            {
                throw new com.ibm.websphere.crypto.KeyException ("Key pair could 
                not be generated.");
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();  // handle exception
        }
    }
}

Cette interface renvoie une paire de clés com.ibm.websphere.crypto.KeyPair qui peut contenir un X509Certificate et un objet PrivateKey ou des objets PublicKey et PrivateKey. Si l'interface com.ibm.websphere.crypto.KeyPair contient un X509Certificate et un objet PrivateKey, le certificat et la clé privée sont enregistrés dans le fichier de clés. Par la suite, ils peuvent utiliser tous types de KeyStore.

Si l'interface com.ibm.websphere.crypto.KeyPair contient des objets PublicKey et PrivateKey, vous devez convertir les valeurs codées en objet SecretKeySpec afin de les stocker. L'environnement d'exécution de WebSphere Application Server stocke et récupère la paire de clés comme clés secrètes. Le module d'exécution reconvertit la paire de clés en objets PublicKey et PrivateKey lorsque le serveur récupère la paire de clés pendant l'établissement de liaison.

Utilisez les constructeurs suivants pour développer l'interface com.ibm.websphere.crypto.KeyPair :
  • Constructeur public et privé
    public KeyPair(java.security.Key clé_publique, java.security.Key clé_privée)
  • Certificat et constructeur privé.
    public KeyPair(java.security.cert.Certificate[] certChain, 
    java.security.Key privateKey)

L'exemple de code précédent illustre la classe KeyPairGenerator au moyen d'un constructeur public et privé. Chaque appel à cette classe génère une paire de clés nouvelle et unique et cette classe est appelée par un KeySet pour créer une nouvelle paire de clés lorsque isKeyPair=true. Le numéro de version du jeu de clés s'incrémente à chaque appel.


Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_ssldevkeypairgen
Nom du fichier : rsec_ssldevkeypairgen.html