Java: Chargement du fichier de clés SSL via une ressource
Si j'ai:
System.setProperty("javax.net.ssl.keyStore", '/etc/certificates/fdms/WS1001237590._.1.ks');
System.setProperty("javax.net.ssl.keyStorePassword", 'DV8u4xRVDq');
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
Je suis capable d'ouvrir une connexion sécurisée sans problème.
Cependant, j'aimerais avoir les certificats stockés directement dans la guerre, donc j'utilise: (Le fichier de flux d'entrée deviendra par la suite un flux de ressources, mais je vais le faire pour l'obtenir pour fonctionner.)
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("/etc/certificates/fdms/WS1001237590._.1.ks"), "DV8u4xRVDq".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, "DV8u4xRVDq".toCharArray());
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(kmf.getKeyManagers(), null, null);
Maintenant, si j'ouvre la même connexion, j'obtiens: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
De quoi êtes-vous, puis de le faire avec le
Je ne vais pas faire quelque chose avec elle. Je suis à l'aide d'un Axe pour ensuite se connecter au service web.
N'oubliez pas de fermer la FileInputStream, des exemples de code dans la javadoc de fichier de clés explicitement la ferme.
SSLContext
instance sc
? Êtes-vous l'utiliser pour créer un SocketFactory
et en le définissant dans l'objet d'effectuer les connexions?Je ne vais pas faire quelque chose avec elle. Je suis à l'aide d'un Axe pour ensuite se connecter au service web.
N'oubliez pas de fermer la FileInputStream, des exemples de code dans la javadoc de fichier de clés explicitement la ferme.
OriginalL'auteur Reverend Gonzo | 2010-07-14
Vous devez vous connecter pour publier un commentaire.
J'ai dû faire quelque chose de similaire a tout à l'arrière. J'ai eu un fichier de certificat et j'ai dû trouver un moyen de le charger et l'utiliser pour une connexion SSL. Espérons que ce que j'ai fait va vous aider.
D'abord, j'ai dû créer un trust manager:
Après que j'ai eu à créer un socket usine qui a utilisé ma confiance manager:
Ensuite, j'ai utilisé de cette prise en usine pour envoyer mon POST:
La seule chose que je ne pouvais pas comprendre comment il suffit d'ajouter le fichier de certificat à l'ordinaire de magasin de clés. Tous les exemples de code source, j'ai trouvé lors de mes recherches, a souligné la création d'un socket facteur, puis l'enregistrement d'un protocole avec ce socket usine. Il est peut-être une façon d'utiliser le socket usine à établir une connexion sans enregistrement d'un protocole; je n'ai pas étudier à fond. Dans mon cas en particulier, la création d'un protocole spécifique a été nécessaire. J'espère que cela va obtenir votre plus loin le long de la voie. J'avoue que cela semble un peu rond-point; j'ai ressenti la même chose quand je l'ai fait au départ. Mais c'était la seule façon que je l'ai eu à travailler. Peut-être que d'autres personnes ont une meilleure solution.
OriginalL'auteur Vivin Paliath
Dans un souci de postérité, tout cela était bien trop compliqué, et nous avons assez bien juste eu un chèque d'un bloc statique:
"si( environnement == 'production') {... Système.setProperty("sun.de sécurité.le protocole ssl.allowUnsafeRenegotiation", "true"); " - I vraiment j'espère que c'est une faute de frappe :-/.
OriginalL'auteur Reverend Gonzo
Avec l'Axe, je pense que vous devez configurer son
SSLSocketFactory
via:où
com.example.MySSLSocketFactory
est votre classe qui implémenteorg.apache.axis.components.net.SecureSocketFactory
(vous pouvez étendreorg.apache.axis.components.net.JSSESocketFactory
peut-être).Dans le
create
méthode, créer un socket à l'aide de la douille de l'usine obtenu à partir de laSSLContext
vous avez configuré.OriginalL'auteur Bruno
Si vous le souhaitez, voici une API pour créer SSLSocket et SSLServerSocket facilement:
https://github.com/gpotter2/SSLKeystoreFactories
Il ne nécessite pas d'autres pots.... juste obtenir les fichiers et de les utiliser comme:
Ou:
C'est beaucoup plus facile à utiliser 🙂
OriginalL'auteur mike345