Подтверждение SSL - проблема java.security.InvalidAlgorithmParameterException

Нужен ваш совет по проблеме с Java.

В настоящее время у нас возникла проблема при доступе к веб-сервису с использованием кода Java. Наш поставщик использует SSL - RSA 2048 бит (SHA256withRSA) с простым значением DH (алгоритм Диффи – Хеллмана) больше 1024 для SSL. У нас в производстве находится версия java 1.6.0.10.

Когда мы выполняем код, мы получаем ошибку -

Caused by: java.lang.RuntimeException: Could not generate DH keypair at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:106)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:556)
        at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:183)
        at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
        at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:893)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1165)
        ... 6 more
Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 1024 (inclusive) at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
        at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
        at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:100)         ... 13 more

Это известная ошибка / ограничение Java, она уже исправлена ​​в версии 7 и новее, но все еще существует в «1.6.0.10».

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044060https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6521495

В приведенных выше ссылках я нашел ниже заявление -

CUSTOMER SUBMITTED WORKAROUND : Using BouncyCastle's JCE implementation, which doesn't impose this restriction, or resorting to the BigNumber API directly.

Мы не можем обновиться до последней версии Java. Есть ли что-нибудь, что мы можем реализовать, чтобы решить эту проблему с подтверждением SSL? Нужны ли нам изменения на стороне сервера для реализации bouncycastle? Или мы можем использовать только на стороне клиента? Любые советы по решению этой проблемы приветствуются.

Обновите Java 6 до версии 6u171 или более поздней (обновлять не нужно).

rustyx 21.11.2018 14:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
1
377
1

Ответы 1

Банку для реализации JCE BouncyCastle можно скачать в ПОСЛЕДНИЕ РЕЛИЗЫ JAVA пакета Bouncy Castle Crypto.
А необходимую конфигурацию можно найти в Чтобы настроить поставщика JCE.
. После завершения настройки. Распечатайте информацию о поставщиках безопасности, как в следующем коде.

Provider[]  providers = Security.getProviders();
for (int i = 0; i != providers.length; i++)
{
     System.out.println(providers[i].getInfo());
}

Посмотрите, отображается ли «BouncyCastle Security Provider v1.60». (Предположим, вы загружаете версию 1.6)

Другие вопросы по теме