Activer TLSv1.2 and TLS RSA WITH AES 256 CBC SHA256 Cipher Suite
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 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 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 TLS_RSA_WITH_AES_256_CBC_SHA256 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 à partir du code Java ci-dessus, je suis capable de me connecter au serveur avec succès via SSL.
est-il possible d'activer/forcer TLSv1.2
et TLS_RSA_WITH_AES_256_CBC_SHA256
en Java 7 sans changer de Code Java par le biais de propriétés, de paramètres ou D'Accessoires de débogage?
j'ai essayé toutes les propriétés ci-dessous sous toutes les formes et combinaisons (activer et désactiver) et j'ai é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 suivant:
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();
}
}
}
tout pointeur indiquant comment y parvenir sans modification du code Java serait très apprécié.
3 réponses
cela n'est possible que si vous utilisez une simple connexion HTTPS (pas de Sockets SSL) en utilisant les propriétés
-Dhttps.protocols=TLSv1.2
-Dhttps.cipherSuites=TLS_RSA_WITH_AES_256_CBC_SHA256
http://fsanglier.blogspot.com.es/
Java 7 introduit le support pour TLS v1.2 (voir http://docs.oracle.com/javase/7/docs/technotes/guides/security/enhancements-7.html) MAIS ne pas l'activer par défaut. En d'autres termes, votre application client doit spécifier explicitement " TLS v1.2" at SSLContext la création, ou autrement ne sera tout simplement pas en mesure de l'utiliser.
si vous avez besoin d'utiliser directement le protocole de socket sécurisé, créez un "TLSv1.2" SSLContext au démarrage de l'application et utilisez le SSLContext.setDefault(ctx) appelle pour enregistrer ce nouveau contexte comme étant le contexte par défaut.
SSLContext context = SSLContext.getInstance("TLSv1.2");
SSLContext.setDefault(context);
Le Jre désactiver tous les 256-bit de chiffrement par défaut. Pour l'activer, vous pouvez télécharger Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Fileshttp://www.oracle.com/technetwork/java/javase/downloads/index.html
Remplacer local_policy.jar et US_export_policy.jar les fichiers jars dans votre lib / security dans le répertoire jre.
on dirait que le vaisseau courant de JRE contient à la fois les fichiers limités et illimités sous le dossier d'installation de JRE dans lib/security
, chacun dans des sous-dossiers distincts. Par défaut,lib/security/java.security
, le limited
stratégie est utilisée par défaut. Mais si vous décommentez le crypto.policy=unlimited
line, qui permettra à Java d'utiliser le unlimited
les fichiers de politique et activer les algorithmes / chiffreurs 256 bits.