Problèmes avec la configuration https.les protocoles de Système de Propriété pour les connexions HTTPS
J'ai une Implémentation de Java qui est utilisé par différentes applications de client se connecte aux systèmes tiers. Ces systèmes tiers prend en charge différents protocoles sur http/https. Dans ce cas, toutes les applications clientes sont hébergées sur le même serveur où mon Java Application hébergée. Donc,dans ce cas, des applications de divers clients de définir différents protocoles https pour les propriétés du Système (par exemple: System.setProperty("https.protocols", "SSLv3")
, System.setProperty("https.protocols", "TLS")
quand ils sont à l'aide de cette de se connecter à ces systèmes tiers.
Ici, les propriétés du Système sont partagés entre toutes les applications dans l'environnement. Ainsi, la modification d'un Système de propriété conduit à de nombreux problèmes. Donc, je veux savoir,
- Est-il possible de le faire sans l'aide des propriétés Système?
- Est-il un moyen de régler tous les possibles https.les protocoles de sorte qu'il
prend en charge toute connexion http ou https faite à la troisième partie
les systèmes prend en charge divers protocoles?
Les protocoles et les algorithmes pris en charge dans chaque version du JDK comme mentionné dans blogs.oracle.com:
Code :
String responseStr = null;
System.setProperty("https.protocols",http-protocol); //This is set by the client applications. Previously, there was one by one (eg : "SSLv3". Then I changed it to "TLSv1.2,TLSv1.1,TLSv1,SSLv3" assuming it will enable all)
byteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byteArrayOutputStream.write(requestStr.getBytes());
URL mUrl = new URL(proxy_url);
HttpURLConnection con = (HttpURLConnection) mUrl.openConnection(); //It works fine for the HttpURLConnection when there's no (s)
con.setRequestMethod("POST");
con.setDoOutput(true);
con.setUseCaches(false);
con.setDoInput(true);
con.setRequestProperty("user-agent","Mozilla(MSIE)");
con.setRequestProperty("Accept-Encoding","gzip,deflate");
byteArrayOutputStream.writeTo(con.getOutputStream());
String encodingHeader = con.getHeaderField("Content-Encoding");
InputStream inputStream = null;
if(encodingHeader != null && encodingHeader.toLowerCase().indexOf("gzip") != -1){
inputStream = new GZIPInputStream(con.getInputStream());
}else {
inputStream = con.getInputStream();
}
if (inputStream != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int length = 0;
while ((length = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, length);
}
responseStr = new String(baos.toByteArray());
baos.close();
}
Mon Java version : 1.5
C'est très vrai. Mais pour l'instant il y a un grand contournement là pour ça. Donc, je suis à la recherche de solution dans la version actuelle
Les réponses à cette question peuvent être pertinents: superuser.com/questions/747377/... De la note est la documentation d'Oracle, qui montre que, bien que TLS1.2 est pris en charge sur Java 1.7, il est désactivé par défaut pour les connexions client.
Le ByteArrayOutputStream est un gaspillage de temps et d'espace ici.
OriginalL'auteur namalfernandolk | 2015-12-15
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de ne pas le mettre à toutes. Il suffit de laisser le système de négocier avec les pairs. Il va négocier le plus fort protocole commun.
Il négocie le plus haut protocole commun aux deux pairs. Je l'ai déjà dit. Si votre version de Java n'a pas l'appui de ce que les pairs nécessite, aucun montant de la configuration des propriétés du système va changer ça.
Oui j'ai noté que l'EJP. Mais pratiquement, nous avons rencontré quelques problèmes quand il n'est pas mentionné. Donc, vous dites qu'il est inutile de mentionner le protocole https.les protocoles de plus que la version de java? (Nous pouvons l'utiliser pour se connecter via une baisse du protocole?). J'apprécie vraiment vos commentaires.
C'est exactement ce que j'ai dit. Vous allez certainement rencontrer des problèmes si les pairs nécessite une version plus récente de Java prend en charge, mais qui n'a rien à voir avec de mentionner le système de la propriété. Si vous avez besoin de TLS 1.2 prend en charge votre seul choix est de mettre à jour votre version de Java.
Je comprends ce que vous dites. Mais pensez à une situation où j'ai une application client appelé "x" et un autre client de l'application appelée "y" qui utilise mon application. Supposons que ma version de java est de 1,7. L'Application x besoins TLSv1.2 pour connecter le tiers, Donc, elle ne se connecte pas quand il n'y a pas de protocole mentionné depuis le défaut de JAVA 1.7 est TLSv1. Lorsque nous avons mis sur le site http.les protocoles de TLSv1.2 il fonctionne. Mais il des effets à un autre client à l'application "y" qui a besoin d'un autre protocole pour se connecter. Si nous ne mentionnons pas le https.protocole qu'il utilise par DÉFAUT un droit? Pas le MEILLEUR.
OriginalL'auteur user207421