SSL和TLS之间的差异及其在Java中的用法

我试图在我设置的Java客户端和服务器之间建立SSL或TLS连接。

我一直在使用SSLContext.getInstance(“SSL”)来构建SSLContext,它的工作。

我想知道协议参数的目的是在SSLContext.getInstance(String protocol)

特别是,使用SSLContext.getInstance(“SSL”)和SSLContext.getInstance(“TLS”)或其他可能的值之间有什么变化?

这里是一个rather detailed answer,我写了一段时间描述SSL和TLS之间的区别。总之,TLS是SSL的后继,TLS 1.0可以被认为是“SSL 3.1”。

如果你看看JSSE Reference Guide, in the SSLContext section,它说:

These static methods each return an instance that implements at least
the requested secure socket protocol. The returned instance may
implement other protocols too. For example, getInstance(“TLSv1”) may
return a instance which implements “TLSv1”, “TLSv1.1” and “TLSv1.2”.

这也在Standard Names文件中提到。

特别是,如果您检查用于SSLContextImpl的Oracle / OpenJDK 7源代码,您会发现它的所有SSLContexts都支持所有协议(从SSLv3使用SSLv2客户端Hello到TLS 1.2)。默认情况下启用哪些协议有什么不同。此外,您不应该依赖于此,因为其他Java实现(例如IBM JRE)可能会有不同的行为。

如果你想要一个特定的协议集用于连接,你应该使用SSLSocket或SSLEngine的setEnabledProtocols方法。否则,它将使用默认值,如Providers documentation中所述。

http://stackoverflow.com/questions/13135230/difference-between-ssl-and-tls-and-their-usage-in-java

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:SSL和TLS之间的差异及其在Java中的用法