Activer TLSv1.2 et TLS_RSA_WITH_AES_256_CBC_SHA256 de la Suite de Chiffrement
Server:
TLS Version: v1.2
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256
Client:
JRE 1.7
Je reçois l'erreur ci-dessous lorsque j'essaie de me connecter au Serveur depuis le Client via le protocole SSL directement:
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
Le code ci-dessous permet de TLSv1.2
Set<String> enabledTLSSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledProtocols()));
enabledTLSSet.add("TLSv1.2");
sslsocket.setEnabledProtocols(enabledTLSSet.toArray(new String[enabledTLSSet.size()]));
Le code ci-dessous permet de TLS_RSA_WITH_AES_256_CBC_SHA256 de la Suite de Chiffrement:
Set<String> enabledCipherSuitesSet = new HashSet<String>(Arrays.asList(sslsocket.getEnabledCipherSuites()));
enabledCipherSuitesSet.add("TLS_RSA_WITH_AES_256_CBC_SHA256");
sslsocket.setEnabledCipherSuites(enabledCipherSuitesSet.toArray(new String[enabledCipherSuitesSet.size()]));
Après avoir fait les deux ci-dessus à partir du code Java, je suis en mesure de se connecter au serveur avec succès grâce au protocole SSL.
Est-il possible d'activer/de la force TLSv1.2
et TLS_RSA_WITH_AES_256_CBC_SHA256
dans Java 7, sans modification du Code Java à l'aide des propriétés, paramètres ou de Débogage accessoires?
J'ai essayé tous les paramètres ci-dessous dans toutes les formes et de combinaisons (activation et désactivation) et a échoué.
-Dhttps.protocols=TLSv1.2
-Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256
-Ddeployment.security.TLSv1.2=true
Je suis l'exécution du programme similaire à ci-dessous:
java -jar -Dhttps.protocols=TLSv1.2 -Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256 Ddeployment.security.TLSv1.2=true -Djavax.net.debug=ssl:handshake SSLPoker.jar <SERVER> 443
SSLPoker contient le code ci-dessous:
package com.ashok.ssl;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;
/**
* Establish a SSL connection to a host and port, writes a byte and prints the response - Ashok Goli. See
* http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
*/
public class SSLPoke {
/**
* The main method.
* Usage: $java -jar SSLPoker.jar <host> <port>
*
* @param args the arguments
*/
public static void main(String[] args) {
if (args.length != 2) {
System.out.println("Usage: " + SSLPoke.class.getName() + " <host> <port>");
System.exit(1);
}
try {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket =
(SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));
InputStream in = sslsocket.getInputStream();
OutputStream out = sslsocket.getOutputStream();
//Write a test byte to get a reaction :)
out.write(1);
while (in.available() > 0) {
System.out.print(in.read());
}
System.out.println("Successfully connected");
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
Tous les pointeurs comment réaliser cela avec aucun code Java changements seront très appréciés.
Quels sont les paramètres que j'ai besoin de jouer avec lui, pour y parvenir?
J'ai fait ajouter TLS et correctement connecté au Serveur avec le code ci-dessus. Simplement à la recherche d'un moyen de le faire via la configuration.
Ashok + @EJP: vous n'avez pas besoin de plein d'entrain, et de toute façon il n'y a pas de JCA/interface de fournisseur pour chaque SSL/TLS suites, seulement l'ensemble du protocole. Java7 JSSE prend en charge la suite de la boîte. En fait, il est déjà activé par défaut de sorte que vous n'avez pas besoin de l'activer, et TLSv1.2 est déjà activé par défaut pour les serveur côté de sorte que vous n'avez pas besoin de l'activer. Mais toutes les suites que l'utilisation de 256-bit de chiffrement de données ne seront utilisé si force illimitée de la compétence de la politique de fichiers (2 pots de JRE/lib/security) sont installés; sont-ils?
Pour votre client, le
https.*
propriétés s'appliquent uniquement aux connexions effectuées par HttpsURLConnection
, c'est à dire, les connexions à partir URLConnection
avec une URL dont le régime est https:
. "SSL/TLS" connexions avec SSLSocketFactory
ne pas les utiliser. Pour ceux que vous devez appeler la .setEnabled*
méthodes sur le support après sa création et avant de faire n'importe quelle entrée, de sortie, ou (explicite) .startHandshake()
.OriginalL'auteur Ashok Felix | 2015-10-12
Vous devez vous connecter pour publier un commentaire.
Il est seulement possible si vous utilisez une simple connexion HTTPS (pas Sockets SSL) utilisant les propriétés
Voir le post à http://fsanglier.blogspot.com.es/
Si vous avez besoin d'utiliser directement secure socket protocole de, créer un "TLSv1.2" SSLContext au démarrage de l'application et de l'utilisation de la SSLContext.setDefault(ctx) appel d'enregistrer ce nouveau contexte que celui par défaut.
OriginalL'auteur pedrofb
La Jre de désactiver toutes les 256-bit de chiffrement par défaut. Pour l'activer, vous pouvez télécharger Java Cryptography Extension (JCE) Force Illimitée de la Compétence de la Politique de Fichiers ici: http://www.oracle.com/technetwork/java/javase/downloads/index.html
Remplacer le local_policy.jar et US_export_policy.jar pots de fichiers dans votre répertoire lib/de sécurité dans le répertoire jre.
OriginalL'auteur Humberto Machado
Il ressemble JRE courant du navire à la fois le limité et l'illimité de la politique de fichiers dans le dossier d'installation du JRE dans
lib/security
, chacune à leur sous-dossiers. Par défaut, danslib/security/java.security
, lelimited
stratégie est utilisée par défaut. Mais si vous décommentez lacrypto.policy=unlimited
ligne, qui permettra de Java à utiliser leunlimited
politique de fichiers et permettre à l'256 bits algorithmes de chiffrement/algorithmes.OriginalL'auteur Kumba