Нужен ваш совет по проблеме с 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? Или мы можем использовать только на стороне клиента? Любые советы по решению этой проблемы приветствуются.




Банку для реализации 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)
Обновите Java 6 до версии 6u171 или более поздней (обновлять не нужно).