我有一个基于 NIO 的应用程序,它必须在 Java 1.4 平台(不是 Sun/Oracle 实现)上运行,并且我想使用 SSL 保护网络连接。但是 javax.net.ssl.SSLEngine API 仅从 Java 5 开始可用。
是否存在 javax.net.ssl.SSLEngine API 的替代、免费、纯 Java 实现?
BouncyCastle 似乎提供了 JCE 的实现,但我没有在他们的包中找到 javax.net.ssl.SSLEngine。我错过了什么?
我有一个基于 NIO 的应用程序,它必须在 Java 1.4 平台(不是 Sun/Oracle 实现)上运行,并且我想使用 SSL 保护网络连接。但是 javax.net.ssl.SSLEngine API 仅从 Java 5 开始可用。
是否存在 javax.net.ssl.SSLEngine API 的替代、免费、纯 Java 实现?
BouncyCastle 似乎提供了 JCE 的实现,但我没有在他们的包中找到 javax.net.ssl.SSLEngine。我错过了什么?
仅当SSLEngine
您想要访问低级 SSL 功能时才需要引擎类,而不需要套接字包装。但是,如果您想使用SSLSocketFactory
,SSLServerSocketFactory
甚至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
实现:
SSLContext sslContext = SSLContext.getInstance("TLS", "BC");