Шифрование ECDHE не поддерживается на OpenJDK 8, установленном на компьютере EC2 Linux

При запуске jetty-distribution-9.3.0.v20150612 с openjdk 1.8.0_51, запущенным на компьютере EC2 Amazon Linux, печатается, что все настроенные комплекты ECDHE не поддерживаются.

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

Они включены в 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>
...

Я прочитал Oracle Java 8 должен поддерживать эти протоколы, но, возможно, это не поддерживается OpenJDK? Или мне нужно каким-то образом включить его?

Обновление

Поставщик криптографии Oracle JCE установлен под jre/lib/security/, но это не помогло.

Ответ 1

Итак, я запускаю аналогичную настройку, а ящик AWS запускает openjdk-1.8.0.51. для меня это решило добавить bouncycastle как провайдера:

  • Добавьте bcprov-<verion>.jar в /usr/lib/jvm/jre/lib/ext

  • Отредактируйте /usr/lib/jvm/jre/lib/security/java.security добавив следующую строку в список поставщиков:

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

(я добавил его как 6-ю запись, но вы можете добавить более высокий порядок, если хотите)

Перезагрузили мое приложение и смогли использовать шифровые комплекты на базе EC, такие как TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256.

Ответ 2

Основной причиной является то, что OpenJDK на CentOS/RHEL/Amazon Linux с OpenJDK на них просто не поставляется с необходимыми родными библиотеками для поддержки EC. Неограниченные файлы политик - это красная селедка, как и любые попытки отключить различные алгоритмы и т.д. Если библиотек там нет, вы не можете использовать эти функции.

Принятый ответ "установить Bouncy Castle" работает, потому что BC обеспечивает реализацию чистой Java всех желаемых алгоритмов. В идеале, JDK обеспечит собственные реализации, которые принесут более высокую производительность.

Похоже, OpenJDK на Amazon Linux просто придется ждать.: (

Ссылка: http://armoredbarista.blogspot.de/2013/10/how-to-use-ecc-with-openjdk.html

Также: https://security.stackexchange.com/questions/117975/how-to-enable-ecdhe-in-openjdk-1-8-0-in-centos-6-7

ОБНОВЛЕНИЕ 2016-11-09

Кажется, что собственная библиотека Oracle Elliptic curve (libsunec.so) лицензируется под лицензией GPL. Вы можете подтвердить это, перейдя в страницу загрузки Oracle, нажав Third Party Licenses и проверку README для вашей версии Java.

Это означает, что если вы можете захватить копию Oracle JRE/JDK для целевой платформы и архитектуры, вы можете извлечь из нее библиотеку libsunec.so и законно установить ее в установку OpenJDK.

Для меня это означало захват файла $JAVA_HOME/jre/lib/amd64/libsunec.so из JRE Oracle Java 8 JRE и удаление его, например. /usr/lib/jvm/jre-1.8.0/lib/amd64/. Это все, что требуется для обеспечения эллиптических кривых алгоритмов.

ОБНОВЛЕНИЕ 2018-03-08

Oracle Java 9 будет включать в себя библиотеки "неограниченной прочности криптографии" по умолчанию, так что приятно. Похоже, OpenJDK по-прежнему потребует от вас установить системное свойство, чтобы включить "криптографию с неограниченной силой" .

Ответ 3

Попробуйте установить JCE Unlimited Strength Jurisdiction Policy Files (это должно помочь с вашими более высокими битовыми шифрами)

Также обратите внимание, что в ссылка, которую вы предоставили о поддержке протокола шифрования java 8, говорит

В наборах шифров, которые используют криптографию с эллиптической кривой (ECDSA, ECDH, ECDHE, ECDH_anon), требуется криптографический провайдер JCE...

Вы установили такой провайдер на свою виртуальную машину Java 8?

Ответ 4

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

Thes-e разрешены в jetty/etc/jetty-ssl-context.xm