создание экземпляра SSLContext с помощью поставщика Bouncy Castle
Я застрял в создании SSLContext (который я хочу использовать для создания экземпляра SSLEngine для обработки зашифрованного транспорта через java-nio):
код
String protocol = "TLSv1.2";
Provider provider = new BouncyCastleProvider();
Security.addProvider(provider);
sslContext = SSLContext.getInstance(protocol,provider.getName());
выбрасывает следующее исключение:
Exception in thread "main" java.lang.RuntimeException: java.security.NoSuchAlgorithmException: no such algorithm: SSL for provider BC
at org.bitmash.network.tcp.ssl.SslTransferFactory.<init>(SslTransferFactory.java:43)
at org.bitmash.network.http.HttpsServer.<init>(HttpsServer.java:19)
я прикрепил текущий пакет поставщика Bouncy Castle " bcprov-jdk15on-150.кувшин' (который я получил от здесь) к пути к классам приложений, а также к его bootclasspath (через VM-Option-Xbootclasspath / p), но ни решить проблему. Я также пробовал разные значения для protocol
(i. e. "SSL" и "TLSv1") без какого-либо эффекта.
кроме того, я нашел людей с похожими проблемами здесь и здесь. Но в отличие от них, я нацелен (и я использую) Java 7 (или больше), но у меня все еще есть эта проблема. Возможно ли вообще использовать Bouncy Castle таким образом, или мне нужно переписать свой протокол, используя их соответствующий API вместо oracle NIO via Sslengineна (как я это делаю прямо сейчас)?
огромное спасибо за любую помощь здесь.
2 ответов
Я знаю, что это старый вопрос, но мне нужен был ответ (поэтому я создаю его):
- [возможно ли] создать экземпляр SSLContext с помощью поставщика надувного замка [?]
- нет
почему бы и нет?
отладка этой строки кода:
Provider [] providers = Security.getProviders();
- версия 1.7 SunJSSE по умолчанию реализует следующие значения SSLContext:
Alg.Псевдоним.Возвращаетsslcontextэкземпляр.Протокол SSL=TLSv1 защита
АЛГ.Псевдоним.Возвращаетsslcontextэкземпляр.Протокол SSLv3=TLSv1 Защита
Возвращаетsslcontextэкземпляр.По умолчанию = sun.безопасность.использование SSL.SSLContextImpl$DefaultSSLContext
Возвращаетsslcontextэкземпляр.В протоколе TLSv1=солнце.безопасность.использование SSL.SSLContextImpl$TLS10Context
Возвращаетsslcontextэкземпляр.В протоколе TLSv1.1=солнце.безопасность.использование SSL.SSLContextImpl$TLS11Context
Возвращаетsslcontextэкземпляр.В протоколе TLSv1.2=солнце.безопасность.использование SSL.SSLContextImpl$TLS12Context - используя bcprov-jdk15on-152.jar и добавление нового BouncyCastleProvider() к безопасности, можно заметить, что нет Значения возвращаетsslcontextэкземпляр доступен.
Это должно иметь смысл, так как надувной замок является JCE реализации, а не по jsse реализация.
надувной замок фактически обеспечивает реализацию JSSE с версии 1.56. Просто не забудьте настроить его с более высоким приоритетом в java.безопасность:
security.provider.1=org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
...
security.provider.6=com.sun.net.ssl.internal.ssl.Provider
вы можете использовать его со стандартным API:
SSLContext context = SSLContext.getInstance("TLS");