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.

Vous ne pouvez pas ajouter des suites de chiffrement TLS sans l'ajout d'un ensemble de fournisseur de sécurité, tels que le Château Gonflable, qui en effet peut soutenir que l'un.
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