2017-06-22 102 views
1

我正在嘗試訪問支持TLSv1.2的web服務。我正在使用Java 1.4。它不支持TLSv1.2。在java 1.4中使用TLSV1.2時沒有這樣的算法異常

現在有人告訴我BC可以解決我的問題。 雖然它可以在SSLEngine中以某種方式替換掉嗎? BC可以嗎?

如果沒有DH對primesize的低限制,我需要做些什麼來獲得工作SSLEngine(用於TLSv1在 非阻塞IO方案中)。

我試了一下:

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

+0

推出:1.57 日期: 2017年5月11日Bouncy castle library表示,該項目中增加了更高級別的TLS API和JSSE提供商。 – GauravT

回答

1

我可以通過使用bctls LIB解決這個問題,但很遺憾,似乎並沒有對的Java 1.4一個版本。

,我能找到在Bouncy Castle's websiteMvn 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工作]

+0

它看起來不錯,但由於java版本問題,我無法使用。 BC表示他們也支持TLS到java 1.4。 BC對1.57版本的評論:「更高級別的TLS API和JSSE提供者已被添加到項目中」。我正在尋找使用bouncycastle的使用TLSv1.2的java 1.4的示例程序。 – GauravT

+0

我在BC的網站上沒有找到這個信息(JSSE在Java 1.4中支持 - 只有一個用於Java> = 1.5的bctls包) – 2017-06-22 16:14:05

+0

你可以在這裏找到BC文章。轉至第2.2.3節「附加功能和功能」。https://www.bouncycastle.org/releasenotes.html – GauravT

相關問題