web-dev-qa-db-fra.com

Suites de chiffrement ECDHE non prises en charge sur OpenJDK 8 installé sur une machine Linux EC2

Au démarrage jetty-distribution-9.3.0.v20150612 avec openjdk 1.8.0_51 s'exécutant sur une machine Amazon Linux EC2, indique que toutes les suites ECDHE configurées ne sont pas prises en charge.

2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA not supported
2015-08-12 16:51:20 main SslContextFactory [INFO] Cipher TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA not supported

Ceux-ci sont activés dans jetty/etc/jetty-ssl-context.xml -

<Set name="IncludeCipherSuites">
<Array type="Java.lang.String">
 <!-- TLS 1.2 AEAD only (all are SHA-2 as well) -->
  <Item>TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
  <Item>TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256</Item>
  <Item>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384</Item>
  <Item>TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256</Item>
  <Item>TLS_DHE_RSA_WITH_AES_256_GCM_SHA384</Item>
  <Item>TLS_DHE_RSA_WITH_AES_128_GCM_SHA256</Item>
...

J'ai lu Oracle Java 8 devrait prendre en charge ces protocoles , mais ce n'est peut-être pas pris en charge par OpenJDK? Ou dois-je l'activer d'une manière ou d'une autre?

Mise à jour

Le fournisseur cryptographique JCE d'Oracle est installé sous jre/lib/security/, mais cela n'a pas aidé.

15
Kof

J'exécute donc une configuration similaire, avec une boîte AWS exécutant openjdk-1.8.0.51. ce qui a résolu pour moi, c'est d'ajouter bouncycastle en tant que fournisseur comme ceci:

  • Ajouter le bcprov-<verion>.jar à /usr/lib/jvm/jre/lib/ext

  • Éditer /usr/lib/jvm/jre/lib/security/Java.security en ajoutant la ligne suivante à la liste des fournisseurs:

    security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
    

(Je l'ai ajouté comme 6ème entrée mais vous pouvez ajouter plus dans l'ordre si vous préférez)

J'ai redémarré mon application et j'ai pu utiliser des suites de chiffrement basées sur EC telles que TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.

15
taleb

La cause principale est qu'OpenJDK sur CentOS/RHEL/Amazon Linux avec OpenJDK sur eux ne sont tout simplement pas livrés avec les bibliothèques natives requises pour prendre en charge EC. Les Fichiers de politique illimités sont un hareng rouge, comme le sont toutes les tentatives de un - désactiver divers algorithmes, etc. Si les bibliothèques ne sont pas là, vous pouvez n'utilisez pas les fonctionnalités.

La réponse acceptée de "installer Bouncy Castle" fonctionne parce que BC fournit une implémentation pure Java de tous les algorithmes souhaités. Idéalement, le JDK fournirait des implémentations natives qui fourniraient des performances supérieures.

Il semble qu'OpenJDK sur Amazon Linux devra simplement attendre. :(

Réf: http://armoredbarista.blogspot.de/2013/10/how-to-use-ecc-with-openjdk.html

Aussi: https://security.stackexchange.com/questions/117975/how-to-enable-ecdhe-in-openjdk-1-8-0-in-centos-6-7

MISE À JOUR 2016-11-09

Il semble que la bibliothèque native de la courbe elliptique d'Oracle (libsunec.so) est sous licence GPL. Vous pouvez le confirmer en allant sur page de téléchargement d'Oracle , en cliquant sur Licences tierces , et en vérifiant le README pour votre version de Java.

Cela signifie que, si vous pouvez récupérer une copie du JRE/JDK d'Oracle pour la plate-forme et l'architecture cible, vous pouvez prendre le libsunec.so bibliothèque à partir de celui-ci et l'installer légalement dans l'installation d'OpenJDK.

Pour moi, cela signifiait saisir le fichier $Java_HOME/jre/lib/AMD64/libsunec.so depuis un Oracle Java 8 JRE et en le déposant par exemple /usr/lib/jvm/jre-1.8.0/lib/AMD64/. C'est tout ce qui est nécessaire pour activer les algorithmes à courbe elliptique.

MISE À JOUR 2018-03-08

Oracle Java 9 inclura les bibliothèques de "cryptographie de force illimitée" activé par défaut , c'est donc bien. Il semble qu'OpenJDK vous demandera toujours de définir une propriété système pour activer la "cryptographie de force illimitée" .

8

Essayez d'installer les JCE Unlimited Strength Jurisdiction Policy Files (ceux-ci devraient vous aider avec vos chiffres plus élevés)

Notez également, dans le lien que vous avez fourni à propos de Java 8 support du protocole de chiffrement dit

Les suites de chiffrement qui utilisent la cryptographie à courbe elliptique (ECDSA, ECDH, ECDHE, ECDH_anon) nécessitent un fournisseur de cryptographie JCE ...

Avez-vous installé un tel fournisseur sur votre Java 8 VM?

1
Joakim Erdfelt