SSL和TLS之间的区别及其在Java中的使用

时间:2012-10-30 08:31:16

标签: java ssl

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

我一直在使用SSLContext.getInstance("SSL")来构建SSLContext,但它确实有效。

我想知道SSLContext.getInstance(String protocol)protocol参数的用途是什么。

特别是,使用SSLContext.getInstance("SSL")SSLContext.getInstance("TLS")或其他可能的值之间会发生什么变化?

2 个答案:

答案 0 :(得分:32)

这是我写的一段rather detailed answer,后来描述了SSL和TLS之间的区别。简而言之,TLS是SSL的后继者,TLS 1.0可以被视为“SSL 3.1”。

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

  

这些静态方法每个都返回一个至少实现的实例   请求的安全套接字协议。返回的实例可能   实现其他协议。例如,getInstance(“TLSv1”)可以   返回实现“TLSv1”,“TLSv1.1”和“TLSv1.2”的实例。

Standard Names文档中也提到了这一点。

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

如果您希望将一组特定协议用于连接,则应使用SSLSocketSSLEngine的{​​{1}}方法。否则,它将使用默认值,如Providers documentation

中所述

答案 1 :(得分:1)

协议用于服务器和客户端之间的通信。因此SSLContext(String protocol)返回协议的实例,然后使用该服务器或客户端相互通信以获得安全级别。

有关更多参考,请参阅此链接。 http://www.herongyang.com/JDK/SSL-java-net-ssl-SSLContext-Class-Test.html