создание экземпляра 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");