Le réglage par défaut de Java SSLContext à partir d'une ressource au moment de l'exécution

Les composants de base de mes question sont (contexte suit l'extrait de code)

  1. Est le code suivant, une alternative valable à la configuration de Java par défaut du fichier de clés via l'-Djavax.net.le protocole ssl.fichier de clés?
  2. Quel est l'impact, autre que de changer la valeur par défaut de la clé et de gestionnaires des fonds, ne serait-ce code avoir sur le comportement de SSL à l'intérieur de la JVM
  3. Est-il une meilleure alternative à la configuration par défaut de fiducie et/ou les magasins de clés, au moment de l'exécution, à partir d'une ressource?
    KeyStore ks = KeyStore.getInstance("JKS");
    ks.load(testService.class.getClassLoader().getResourceAsStream("resources/.keystore"), "changeit".toCharArray());
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(ks);
    KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    kmf.init(ks, "changeit".toCharArray());
    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
    SSLContext.setDefault(ctx); 

Le contexte entourant cette question est comme suit. Je suis actuellement à l'élaboration d'un CXF client pour un service web avec l'authentification par certificat. Pour diverses raisons, ajouter le certificat du client et la clé de la valeur par défaut du fichier de clés n'est pas une option souhaitable. Idéalement, je cherchais un moyen d'inclure un fichier de clés en tant que fichier de ressources dans le POT, et le définir comme valeur par défaut au moment de l'exécution, que le besoin s'en fait sentir. Je voulais aussi éviter de configuration de chaque client et/ou de connexion sur chaque objet, et aussi de soutenir le fonctionnement des choses comme JaxWsDynamicClientFactory (surtout pour le souci d'exhaustivité).

J'ai parcouru l'internet pour le matériel pertinent et trouvé ces (un, deux) liées à des questions, mais aucune des solutions proposées étaient exactement ce que je cherchais (bien que je ne l'utiliser comme tremplin pour développer le code ci-dessus).

Maintenant, je me rends compte que d'autres solutions pourraient être apportées à travailler, mais j'étais/suis spécifiquement à la recherche d'une solution qui réponde à toutes ces exigences.

OriginalL'auteur Jeffrey P | 2012-01-06