Question

Je tente d'activer la communication SSL d'un client de service Web (Axis2) en utilisant le certificat sur la carte CAC de l'utilisateur. Fonctionne comme un charme .... que le serveur Web est activé CAC. A ce moment, la connexion SSL est rejeté avec le message d'erreur que les autres certificats de la chaîne ne sont pas inclus.

Je me suis assuré que le fournisseur est disponible, que ce soit en l'ajoutant au fichier security.properties ou sa création programatically.

Mon approche actuelle est de définir simplement les propriétés du système:     System.setProperty ( "javax.net.ssl.keyStore", "NONE");     System.setProperty ( "javax.net.ssl.keyStoreType", "PKCS11");

Je comprends ce questions / réponses que cette approche envoie uniquement le certificat « entité fin ». Apparemment, je dois mettre en œuvre ma propre X509KeyManager. Ce qui est nouveau terrain pour moi, quelqu'un peut-il suggérer une bonne référence ou fournir des échantillons de la façon de le faire?

Appréciez l'aide.

Était-ce utile?

La solution

La meilleure mise en œuvre du gestionnaire de clés dépend de l'émetteur des certificats que vous préparez à utiliser.

Si le certificat sur le CAC utilisateur toujours être émis par une autorité de certification spécifique, simplement stocker le certificat de l'émetteur et des certificats intermédiaires en amont de la chaîne dans un fichier PKCS # 7. Dans la section getCertificateChain() méthode , cette collection peut être ajouté aveuglément au certificat de l'utilisateur et retourné.

Si les choses ne sont pas tout à fait aussi simple que cela, mais une liste complète des émetteurs possibles peuvent être dénombrés, obtenir tous leurs certificats, et leur certificats de l'émetteur, et ainsi de suite, jusqu'à les certificats racine .

Ajoutez tous les certificats racine à une clé de stockage sous forme d'entrées de confiance. Regroupez les certificats intermédiaires dans un fichier PKCS- # 7 format.

Mettre en œuvre X509KeyManager ( ou étendre X509ExtendedKeyManager si vous re travailler avec SSLEngine). Plus précisément, dans la méthode getCertificateChain(), vous utilisez un racines de confiance sont les certificats en magasin de la confiance que vous avez créé; les certificats intermédiaires peuvent être chargé du fichier PKCS # 7 et ajouté aux paramètres de constructeur. une fois que la chaîne est construite, obtenir le chemin du certificat et convertir à un tableau. Ceci est le résultat de la méthode getCertificateChain().

Si vous ne pouvez pas prédire qui sera délivrance d'un certificat de l'utilisateur, vous pourriez être en mesure d'obtenir les certificats intermédiaires lors de l'exécution d'un annuaire LDAP ou un autre référentiel. C'est un nouveau niveau de difficulté tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top