Шифрование 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