2017-06-05 1 views
0

Je fais une connexion SSL (en tant que client) et selon this Oracle article les deux costumes cypher suivants sont supportés dans JDK7 si vous utilisez TLSv1.2 et activer la version forte de la compétence politique.JDK7 SSL conenction Problème Ignorer la suite de chiffrement non pris en charge: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Cependant, les deux algorithmes cypher sont ignorés lors de la connexion sécurisée.

Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 
**Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384** 
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 
**Ignoring unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256** 
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 
Ignoring unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 
Ignoring unsupported cipher suite: TLS_RSA_WITH_AES_128_CBC_SHA256 
Allow unsafe renegotiation: false 
Allow legacy hello messages: true 
Is initial handshake: true 
Is secure renegotiation: false 
%% No cached client session 
*** ClientHello, TLSv1.2 
RandomCookie: GMT: 1496192143 bytes = { 166, 200, 78, 178, 69, 10, 17, 174, 212, 142, 188, 108, 136, 152, 242, 222, 94, 231, 4, 86, 2, 99, 202, 4, 204, 130, 236, 120 } 
Session ID: {} 
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, TLS_EMPTY_RENEGOTIATION_INFO_SCSV] 
Compression Methods: { 0 } 
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1, sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1, sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1, sect239k1, secp256k1} 
Extension ec_point_formats, formats: [uncompressed] 
Extension signature_algorithms, signature_algorithms: SHA512withECDSA, SHA512withRSA, SHA384withECDSA, SHA384withRSA, SHA256withECDSA, SHA256withRSA, SHA224withECDSA, SHA224withRSA, SHA1withECDSA, SHA1withRSA, SHA1withDSA, MD5withRSA 
Extension server_name, server_name: [host_name: api.sms.optus.com.au] 
*** 
main, WRITE: **TLSv1.2** Handshake, length = 222 
main, READ: TLSv1.2 Alert, length = 2 
main, RECV TLSv1 ALERT: fatal, handshake_failure 
main, called closeSocket() 
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 
ERROR [main] (TestRest.java:42) - Error : 

J'ai mis le TLSv1.2

  • -Dhttps.protocols = TLSv1.2

J'ai installé le "JCE Politique Unlimited Strength Jurisdiction fichiers" et je peut confirmer son installation avec succès en exécutant le code suivant

try { 
    int maxAllowedKeyLength = Cipher.getMaxAllowedKeyLength("AES"); 
    System.out.println("AES: " + maxAllowedKeyLength); 
    return maxAllowedKeyLength >= 256; 
} catch (NoSuchAlgorithmException e) { 
    return false; 
} 

Je pense que les deux algorithmes de chiffrement ne sont pas supportés dans JDK7 mais mentionnés par erreur dans l'article Oracle?

Notes:

  • Il n'y a pas de problème si je lance le c0ode dans JDK8.
  • Je suis derrière firewal et ai dû installer proxy. mais je ne pense pas que ce soit lié comme je peux me connecter au JDK8 sans problème.
+0

Il y a beaucoup de suites de chiffrement. Pourquoi ces deux particuliers sont-ils un problème? – EJP

+0

@EJP Malheureusement, l'hôte n'accepte que quatre combinaisons de chiffrement. Deux d'entre eux sont complètement non pris en charge dans JDK7 et les deux autres sont ceux que je mentionne dans le post. [checkhere] (https://www.ssllabs.com/ssltest/analyze.html?d=api.sms.optus.com.au) – Reza

+1

Hmm, eh bien je confirme tes résultats, ça ne marche pas pour moi non plus en JDK 1.7.0_25, fait en 1.8.0. – EJP

Répondre

1

Le réglage initial du « permis » la liste des chiffrements est calculée en SSLContextImpl.init avant toute adaptation se fait, et dans le client java7 la liste initiale du protocole est que SSLv3 et TLSv1 (et dans les versions récentes java.security configurent jdk.tls.disabledAlgorithms à supprimer SSLv3 à cause de POODLE) donc cela désactive tous les chiffrements TLSv1.2 seulement, qui sont les seuls que ce serveur acceptera. C'est la source des messages Ignoring unsupported dans votre trace avant le début de la prise de contact.

Si vous utilisez HttpsURLConnection vous devez définir les deux https.protocols et https.cipherSuites (note S majuscule) sysprops. Si vous utilisez directement SSLSocket vous devez appeler à la fois .setEnabledProtocols incluant (au moins) TLSv1.2 et incluant (au moins) l'un des algorithmes que vous avez mis en surbrillance dans votre Q, ou remplacer/emballer l'usine pour faire l'équivalent.

Java8 n'a pas le problème parce que sa liste de protocole par défaut pour le client et le serveur est SSLv3, TLSv1, TLSv1.1, TLSv1.2, encore une fois avec SSLv3 enlevé par jdk.tls.disabledAlgorithms

+0

J'utilisais le Spring Resttemplate et en utilisant HttpsURLConnection pour faire les connexions. il suffit de définir https.cipherSuites avec les combinaisons de chiffrement manquantes pour résoudre le problème. Merci hanches. – Reza