Comment spécifier sortant alias du certificat HTTPS-appels?
Je vais appeler un service qui nécessite une authentification par certificat client.
Si je spécifier un keystore Java contenant un seul certificat (le certificat du client le service attend), alors tout fonctionne bien. Cependant, si j'utilise un fichier de clés qui contient plusieurs certificats alors je ne peux pas semblent être en mesure de spécifier le certificat doit être récupéré par le client, le client semble prendre le premier certificat disponibles (dans l'ordre alphabétique).
J'ai essayé de la propriété suivante, mais sans résultat attendu:
System.setProperty("com.sun.enterprise.security.httpsOutboundKeyAlias", "my-client-certificate alias");
Comment puis-je spécifier le certificat du client alias qui devraient être utilisés?
Le fichier de clés contiennent également le client de la clé privée, ou vous avez seulement importé une liste de certificats?
Oui, il contient les clients de la clé privée, entre autres clés privées.
Oui, il contient les clients de la clé privée, entre autres clés privées.
OriginalL'auteur aksamit | 2011-03-13
Vous devez vous connecter pour publier un commentaire.
Réponse courte: il ne peut être fait avec Java par défaut ssl mise en œuvre.
Réponse longue: j'ai regardé sur la façon de la connexion SSL est mis en œuvre dans le
sun.security.ssl.ClientHandshaker
. Dans sa méthodeserverHelloDone
est appeléX509ExtendedKeyManager.chooseClientAlias
. Sa mise en oeuvre sont vraiment fait de telle manière qu'ils retournent à la première alias, dont l'entrée correspond à la donnée de l'algorithme à clé et quelques autres choses. Aucune façon comment modifier l'alias de sélection.Pour ceux qui peuvent changer le code, il semble prometteuse solution de contournement: http://www.44342.com/java-f392-t785-p1.htm
OriginalL'auteur Jakub
Les liens qui Jakub fournit dans sa réponse vous conduire à la réponse, mais je voulais poster une simple réponse ici, car nous avons eu du mal avec ce problème pendant un bon moment avant de finalement arriver quelque chose qui a travaillé.
Nous avons le cas où il existe plusieurs certificats disponibles à utiliser, et nous avons besoin d'utiliser celui qui a un alias spécifique pour effectuer notre connexion. Nous l'avons fait en créant notre propre KeyManager de mise en œuvre qui traverse la plupart de ses fonctionnalités à la valeur par défaut X509KeyManager mais dispose de fonctionnalités pour choisir exactement le bon alias à utiliser lors de la connexion est effectuée.
D'abord le gestionnaire de clés que nous avons créé:
Toutes les autres méthodes nécessaires pour la mise en œuvre sont passthroughs à
originatingKeyManager
.Puis, lorsque nous avons effectivement mis en place le contexte:
L'espoir qu'il soit clair, et travaille pour quelqu'un d'autre tente de résoudre ce problème.
OriginalL'auteur zarniwoop
Heres un code complet ciselée qui fonctionne.
- Je l'utiliser pour créer une connexion SSL sur Android avec un fichier de clés à partir d'une carte à puce qui contient plusieurs certificats correspondant à la norme de critères de filtrage.
Les crédits vont à zarniwoop.
OriginalL'auteur Frankie
Mon impression de la KeyManager est qu'une fois qu'il est initialisé avec le fichier de clés, il utilise l'alias de la clé privée de l'entrée pour trouver le certificat associé et de la chaîne de certification.
Sinon,je pense qu'il choisit une chaîne basée sur les types de clés et les autorités de certification reconnues par l'hôte.
Donc dans votre cas, votre description ne mentionne pas une entrée privée dans le fichier de clés, donc je suppose que le keymanager choisit le plus adapté certificat.
Je ne suis pas au courant du tout de la système de la propriété que vous mentionnez.
-Essayez de modifier le fichier de clés à disposer d'une clé privée et les associés de la chaîne d'
-Ou (je ne sais pas si cela va fonctionner) de modifier l'alias du certificat que vous souhaitez envoyer au serveur pour faire correspondre le nom du sujet du certificat
les clés privées?Vous avez dans le keystore plusieurs clés privées et leurs chaînes?Parce que de votre question, je pensais que tu n'avais que plusieurs certificats (seuls les certificats approuvés)
OriginalL'auteur Cratylus