Création d'un gestionnaire de clés personnalisé pour SSL

Vous pouvez créer une configuration de gestionnaire de clés personnalisée dans toutes les portées de gestion et associer le nouveau gestionnaire de clés à une configuration SSL (Secure Sockets Layer).

Avant de commencer

Vous devez développer, empaqueter et rechercher un fichier .JAR (Java™ Archive) pour un gestionnaire de clés personnalisé dans le répertoire was.install.root/lib/ext dans WebSphere Application Server.

Pourquoi et quand exécuter cette tâche

Procédez comme suit dans la console d'administration :

Procédure

  1. Déterminez si vous souhaitez créer le gestionnaire de clés personnalisé dans la portée de la cellule ou sous la portée de la cellule, au niveau du noeud, du serveur de la grappe, par exemple.
    Important : Lorsque vous créez un gestionnaire de clés personnalisé au niveau inférieur à la portée de la cellule, vous ne pouvez l'associer qu'à une configuration SSL (Secure Sockets Layer) de la même portée ou d'une portée supérieure. Une configuration SSL d'une portée inférieure au gestionnaire de clés ne permet pas de visualiser la configuration du gestionnaire de clés.
    • Pour créer un gestionnaire de clés personnalisé à la portée de la cellule, cliquez sur Sécurité > Gestion des certificats SSL et des clés > Gestionnaires de clés. Chaque configuration SSL de la cellule peut sélectionner le gestionnaire de clés à la portée de la cellule.
    • Pour créer un gestionnaire de clés personnalisé à un niveau en dessous du niveau de la cellule, cliquez sur Sécurité > Certificat SSL et gestion des clés > Gérer les configurations de sécurité du noeud final > {Entrant | Sortant} > configuration_SSL > Gestionnaires de clés.
  2. Cliquez sur Nouveau pour créer un gestionnaire de clés.
  3. Entrez un nom de gestionnaire de clés unique.
  4. Sélectionnez le paramètre d'implémentation Personnalisé. Avec le paramètre personnalisé, vous pouvez définir une classe Java, qui possède une implémentation dans l'interface Java javax.net.ssl.X509KeyManager et, éventuellement, l'interface WebSphere Application Server com.ibm.wsspi.ssl.KeyManagerExtendedInfo. Le paramètre d'implémentation standard ne s'applique que lorsque le gestionnaire de clés est déjà défini dans la liste des fournisseurs de sécurité Java comme fournisseur et comme algorithme, ce qui n'est pas le cas pour un gestionnaire de clés personnalisé. Le gestionnaire de clés standard classique est le suivant : algorithme = IbmX509, fournisseur = IBMJSSE2.
  5. Entrez un nom de classe. Par exemple, com.ibm.test.CustomKeyManager.
  6. Sélectionnez l'une des actions suivantes :
    • Cliquez sur Valider, puis sur Propriétés personnalisées sous Propriétés supplémentaires pour ajouter des propriétés personnalisées au nouveau gestionnaire de clés personnalisé. Lorsque vous avez fini d'ajouter des propriétés personnalisées, cliquez sur OK et sur Sauvegarder, puis passez à l'étape suivante.
    • Cliquez sur OK et Sauvegarder, puis passez à l'étape suivante.
  7. Cliquez sur Gestion des certificats SSL et des clés dans les éléments de navigation de la page.
  8. Sélectionnez l'une des actions suivantes :
    • Cliquez sur Configuration SSL sous Eléments connexes pour une configuration SSL de niveau cellule.
    • Cliquez sur Gérer les configurations de sécurité du noeud final pour sélectionner une configuration SSL à un niveau inférieur.
  9. Cliquez sur le lien de la configuration SSL existante à associer au nouveau gestionnaire de clés personnalisé. Vous pouvez créer une configuration SSL au lieu d'associer le gestionnaire de clés personnalisé à une configuration existante. Pour plus d'informations, consultez l'exemple suivant.
  10. Cliquez sur Gestionnaires de clés et de tiers dignes de confiance sous Propriétés supplémentaires.
  11. Sélectionnez le nouveau gestionnaire de clés personnalisé dans la liste déroulante Gestionnaire de clés. Si le nouveau gestionnaire de clés personnalisé ne figure pas dans la liste, vérifiez que vous avez sélectionné une portée de configuration SSL qui se trouve au niveau sélectionné à l'étape 8 ou à un niveau inférieur.
  12. Cliquez sur OK et sur Sauvegarder.

Résultats

Vous avez créé une configuration de gestionnaire de clés qui référence un fichier JAR dans le répertoire d'installation de WebSphere Application Server et associé la configuration personnalisée à une configuration SSL au cours de l'établissement de la connexion.

Exemple

Développement d'un gestionnaire de clés personnalisé pour une sélection personnalisée de clés SSL (Secure Sockets Layer). L'exemple suivant illustre un gestionnaire de clés personnalisé. Ce gestionnaire de clés simple renvoie l'alias configuré s'il est défini à l'aide des propriétés d'alias com.ibm.ssl.keyStoreClientAlias ou com.ibm.ssl.keyStoreServerAlias, selon le côté de la connexion sur lequel le gestionnaire de clés est utilisé. Le gestionnaire de clés s'en remet au gestionnaire de clés IbmX509 JSSE par défaut pour sélectionner un alias si ces caractéristiques ne sont pas définies.

Après avoir créé et validé un gestionnaire de clés personnalisé, vous pouvez le configurer depuis le fichier ssl.client.props pour un client pur ou en utilisant le lien SSLConfiguration KeyManager dans la console d'administration. Pour de plus amples informations sur les gestionnaires de clés, voirContrôle des identités de certificat X.509 par le gestionnaire de clés.

Un seul gestionnaire de clés pouvant être configuré à la fois pour une configuration SSL (Secure Sockets Layer) donnée, les sélections de certificats du coté serveur peuvent ne pas fonctionner comme elles le devraient lorsque le gestionnaire de clés par défaut IbmX509 est spécifié. Lorsqu'un gestionnaire de clés est configuré, il appartient au processeur de ce gestionnaire de clés de s'assurer que la sélection des alias de la configuration SSL fournie est correctement définie lorsque chooseClientAlias ou chooseServerAlias sont appelés. Consultez les propriétés com.ibm.ssl.keyStoreClientAlias et com.ibm.ssl.keyStoreServerAlias.
Remarque : Cet exemple doit être utilisé uniquement à titre indicatif et n'est pas pris en charge.
package com.ibm.test;

import java.security.cert.X509Certificate;
import com.ibm.wsspi.ssl.KeyManagerExtendedInfo;

public final class CustomKeyManager 
	implements javax.net.ssl.X509KeyManager, com.ibm.wsspi.ssl.KeyManagerExtendedInfo
{
    private java.util.Properties props = null;
    private java.security.KeyStore ks = null;
    private javax.net.ssl.X509KeyManager km = null;
    private java.util.Properties sslConfig = null;
    private String clientAlias = null;
    private String serverAlias = null;
    private int clientslotnum = 0;
    private int serverslotnum = 0;

    public CustomKeyManager()
    {
    }

    /**
     * Méthode appelée par le module d'exécution WebSphere Application Server pour définir
     * les propriétés.
     * 
     * @param java.util.Properties - custom props
     */
    public void setCustomProperties(java.util.Properties customProps)
    {
        props = customProps;
    }

    private java.util.Properties getCustomProperties()
    {
        return props;
    }

    /**
     * Méthode appelée par le module d'exécution pour définir
     * les propriétés de configuration SSL utilisées pour cette connexion.
     * 
     * @param java.util.Properties - contient une propriété pour la configuration SSL.
     */
    public void setSSLConfig(java.util.Properties config)
    {
        sslConfig = config;                                   
    }

    private java.util.Properties getSSLConfig()
    {
        return sslConfig;
    }

    /**
     * Méthode appelée par le module d'exécution WebSphere Application Server pour définir le
     * X509KeyManager par défaut créé par IbmX509 KeyManagerFactory en utilisant les informations KeyStore
     * présentes dans cette configuration SSL.  Cela permet une délégation
     * vers l'IbmX509 KeyManager par défaut.
     * 
     * @param javax.net.ssl.KeyManager defaultX509KeyManager - gestionnaire de clés par défaut IbmX509
     */
    public void setDefaultX509KeyManager(javax.net.ssl.X509KeyManager defaultX509KeyManager)
    {
        km = defaultX509KeyManager;
    }

    public javax.net.ssl.X509KeyManager getDefaultX509KeyManager()
    {
        return km;
    }

    /**
     * Méthode appelée par le module d'exécution pour définir
     * le KeyStore SSL utilisé pour cette connexion.
     * 
     * @param java.security.KeyStore - le KeyStore actuellement configuré
     */
    public void setKeyStore(java.security.KeyStore keyStore)
    {
        ks = keyStore;
    }

    public java.security.KeyStore getKeyStore()
    {
        return ks;
    }

 /**
     * Méthode appelée par le code personnalisé pour définir l'alias du serveur.
     * 
     * @param String - l'alias du serveur à utiliser
     */
    public void setKeyStoreServerAlias(String alias)
    {
        serverAlias = alias;
    }

    private String getKeyStoreServerAlias()
    {
        return serverAlias;
    }

    /**
     * Méthode appelée par le code personnalisé pour définir l'alias du client.
     * 
     * @param String - l'alias du client à utiliser
     */
    public void setKeyStoreClientAlias(String alias)
    {
        clientAlias = alias;
    }
    
    private String getKeyStoreClientAlias()
    {
        return clientAlias;
    }

    /**
     * Méthode appelée par le code personnalisé pour définir l'alias et l'emplacement du client (si nécessaire).
     * 
     * @param String - l'alias du client à utiliser
     * @param int - l'emplacement à utiliser (pour le matériel)
     */
    public void setClientAlias(String alias, int slotnum) throws Exception
    {
        if ( !ks.containsAlias(alias))
        {
            throw new IllegalArgumentException ( "Alias client " + alias + " 
            introuvable dans le fichier de clés." );
        }
        this.clientAlias = alias;
        this.clientslotnum = slotnum;
    }

    /**
     * Méthode appelée par le code personnalisé pour définir l'alias et l'emplacement du serveur (si nécessaire).
     * 
     * @param String - l'alias du serveur à utiliser
     * @param int - l'emplacement à utiliser (pour le matériel)
     */
    public void setServerAlias(String alias, int slotnum) throws Exception
    {
        if ( ! ks.containsAlias(alias))
        {
            throw new IllegalArgumentException ( "Alias serveur " + alias + " 
            introuvable dans le fichier de clés." );
        }
        this.serverAlias = alias;
        this.serverslotnum = slotnum;
    }


    /**
     * Méthode appelée par le module d'exécution JSSE lorsqu'un alias est nécessaire
     * pour une connexion client dans laquelle un certificat client est requis.
     * 
     * @param String keyType
     * @param Principal[] issuers
     * @param java.net.Socket socket (pas toujours présente)
     */
    public String chooseClientAlias(String[] keyType, java.security.Principal[]
    issuers, java.net.Socket socket)
    {
        if (clientAlias != null && !clientAlias.equals(""))
        {
            String[] list = km.getClientAliases(keyType[0], issuers);
            String aliases = "";

            if (list != null)
            {
                boolean found=false;
                for (int i=0; i<list.length; i++)
                {
                    aliases += list[i] + " ";
                    if (clientAlias.equalsIgnoreCase(list[i]))
                        found=true;
                }

                if (found)
                {
                    return clientAlias;
                }

            }
        }
        
        // alias client introuvable, laissez le gestionnaire de clés par défaut choisir.
        String[] keyArray = new String [] {keyType[0]};
        String alias = km.chooseClientAlias(keyArray, issuers, null);
        return alias.toLowerCase();
    }

    /**
     * Méthode appelée par le module d'exécution JSSE lorsqu'un alias est nécessaire à une
     * connexion de serveur pour fournir l'identité du serveur.
     * 
     * @param String[] keyType
     * @param Principal[] issuers
     * @param java.net.Socket socket (pas toujours présente)
     */
    public String chooseServerAlias(String keyType, java.security.Principal[] 
    issuers, java.net.Socket socket)
    {
        if (serverAlias != null && !serverAlias.equals(""))
        {
            // Obtenir la liste des alias du fichier de clés depuis le gestionnaire de clés par défaut
            String[] list = km.getServerAliases(keyType, issuers);
            String aliases = "";

            if (list != null)
            {
                boolean found=false;
                for (int i=0; i<list.length; i++)
                {
                    aliases += list[i] + " ";
                    if (serverAlias.equalsIgnoreCase(list[i]))
                        found = true;
                }

                if (found)
                {
                    return serverAlias;
                }
            }
        }

        // alias spécifié introuvable, laissez le gestionnaire de clés par défaut choisir.
        String alias = km.chooseServerAlias(keyType, issuers, null);
        return alias.toLowerCase();
    }

    public String[] getClientAliases(String keyType, java.security.Principal[] issuers)
    {
        return km.getClientAliases(keyType, issuers);
    }

    public String[] getServerAliases(String keyType, java.security.Principal[] issuers)
    {
        return km.getServerAliases(keyType, issuers);
    }

    public java.security.PrivateKey getPrivateKey(String s)
    {
        return km.getPrivateKey(s);
    }

    public java.security.cert.X509Certificate[] getCertificateChain(String s)
    {
        return km.getCertificateChain(s);
    }

    public javax.net.ssl.X509KeyManager getX509KeyManager()
    {
        return km;
    }

}

Que faire ensuite

Vous pouvez créer un gestionnaire de clés personnalisé pour un client pur. Pour plus d'informations, consultez la rubrique relative au groupe de commandes keyManagerCommands pour l'objet AdminTask.

Icône indiquant le type de rubrique Rubrique de tâche



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=tsec_sslcreatecuskeymgr
Nom du fichier : tsec_sslcreatecuskeymgr.html