Получение Нет такого исключения алгоритма при использовании TLSV1.2 в Java 1.4
Я пытаюсь поразить веб-сервис, который поддерживает TLSv1.2. Я использую Java 1.4. Он не поддерживает TLSv1.2.
Теперь кто-то сказал мне, что BC может решить мою проблему. Хотя это работает с SSLEngine как падение замены как-то? Это возможно с BC?
Что я должен сделать, чтобы получить работу SSLEngine
(для использования с TLSv1 в неблокирующем сценарии ввода-вывода) без таких низких ограничений на простые числа для DH.
Что я пробовал:
Security.addProvider(new BouncyCastleProvider());
Это само по себе не решает проблему.
Так что вместо
SSLContext.getInstance("TLSv1"); //which works alas only little DH keys.
Я попытался позвонить следующее:
SSLContext.getInstance("TLSv1","BC");
SSLContext.getInstance("TLS","BC");
SSLContext.getInstance("TLSv1.2","BC");
SSLContext.getInstance("ssl","BC");
Хотя все они кидают NoSuchAlgorithmException
,
1 ответ
Я мог бы решить эту проблему, используя bctls lib, но, к сожалению, у него нет версии для Java 1.4.
Единственная версия, которую я смог найти на веб-сайте Bouncy Castle и в Mvn Repository, - это bctls-jdk15on-157 (для Java> = 1.5).
В любом случае, если обновление вашей версии Java возможно, вам просто нужно добавить этот jar в ваш проект и использовать org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
класс (я использовал Java 1.7 для этого теста):
// add the JSSE provider
Security.addProvider(new BouncyCastleJsseProvider());
// tests
SSLContext.getInstance("TLSv1.1", BouncyCastleJsseProvider.PROVIDER_NAME);
SSLContext.getInstance("TLSv1.2", BouncyCastleJsseProvider.PROVIDER_NAME);
SSLContext.getInstance("TLSv1", BouncyCastleJsseProvider.PROVIDER_NAME);
Все приведенные выше тесты выполняются без ошибок.
Проверка всех поддерживаемых протоколов SSL:
SSLContext context = SSLContext.getInstance("TLSv1", BouncyCastleJsseProvider.PROVIDER_NAME);
System.out.println(Arrays.toString(context.getSupportedSSLParameters().getProtocols())); // [TLSv1.1, TLSv1, TLSv1.2]
Выход:
[TLSv1.1, TLSv1, TLSv1.2]