J'essaie d'envoyer un certificat client au serveur. Je construis un SSLSocketFactory sur un HttpURLConnection.java HttpsURLConnection et envoi de certificats client
Je pense que je dois rendre la clé disponible via un KeyManager dont SSLSocketFactory a connaissance. Le problème que j'ai est d'obtenir la clé dans le KeyManager.
La clé privée et le certificat sont dans un fichier PEM (et ils ne peuvent pas figurer dans un fichier de magasin de clés). Je sais lire/décoder le fichier et j'ai validé avec succès le certificat client. Mais lorsque je tente de mettre la clé (comme octet []) dans le KeyManager, il se plaint: java.security.KeyStoreException: key is not encoded as EncryptedPrivateKeyInfo
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null); // init the keystore
// This Fails: it wants it encoded as EncryptedPrivateKeyInfo
ks.setKeyEntry("MyAlias", clientKeyAsBytes, new Certificate[]{clientCert});
Quelle est la bonne façon de le faire?
Juste pour que je comprends mieux la racine votre problème, dans quel contexte faites-vous cela? Il existe un certain nombre de bibliothèques et de frameworks qui peuvent gérer ce genre de choses automatiquement pour vous. Une telle bibliothèque est la bibliothèque JSch (J Secure Channel). –
Ceci est le code pour les clients qui ne veulent pas utiliser de bibliothèques supplémentaires (qui devraient être vérifiées). Le client appelle un service Web qui requiert un certificat client pour l'autorisation. Et le déploiement utilise des fichiers .PEM. –