2013-11-04 53 views
1

我有一个基于NIO的应用程序必须在Java 1.4平台(而不是Sun/Oracle实现)上工作,并且我希望使用SSL来保护网络连接。但javax.net.ssl.SSLEngine API仅在Java 5开始才可用。JDK 1.4的SSLEngine的实现?

是否存在javax.net.ssl.SSLEngine API的替代免费纯Java实现?

BouncyCastle似乎提供了JCE的实现,但是我没有在它们的包中找到javax.net.ssl.SSLEngine。我错过了什么?

回答

-1

仅当您希望访问低级别SSL功能而不使用套接字换行时,才需要引擎类SSLEngine。但是,如果您想使用SSLSocketFactorySSLServerSocketFactory或甚至HttpsURLConnection类来完成网络连接,则可以完成这项工作。

一个简单的例子代码片段:

SSLContext sslContext = SSLContext.getInstance("TLS"); 
SSLSocketFactory sf = sslContext.getSSLSocketFactory(); 
Socket socket = new Socket(); 
Socket sslSocket = sf.createSocket(socket, "ssl.example.com", 4443, true); 
OutputStream out = sslSocket.getOutputStream(); 
out.write(/* ... */); 

请注意,如果你没有使用Sun JDK/JRE实施的“TLS”算法的实现可能存在,且SSLContext.getInstance可能抛出NoSuchAlgorithmException。在这种情况下,您应该使用BouncyCastle安全提供程序。

你可以调用添加BC提供商:

java.security.Security.addProvider(new BouncyCastleProvider()); 

,并要求一个特定的BC-SSLContext实现:使用NIO工作需要

SSLContext sslContext = SSLContext.getInstance("TLS", "BC"); 
+0

SSLEngine的,这是我的问题mentionned 。如果没有SSLEngine,我们必须使用[dirty hack](http://rox-xmlrpc.sourceforge.net/niotut/index.html#NIO),它使用1ms超时的阻塞读取。 – dolmen

+0

对不起,我太快读了你的问题。不幸的是,我不知道任何其他NIO兼容的Oracle独立TLS实现。 – Jcs