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

use*_*746 35 java ssl

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

我一直在用它SSLContext.getInstance("SSL")来构建它SSLContext,它起作用了.

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

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

Bru*_*uno 32

这是一个相当详细的答案,我后来写了一段时间来描述SSL和TLS之间的区别.简而言之,TLS是SSL的后继者,TLS 1.0可以被视为"SSL 3.1".

如果你看一下JSSE参考指南,在SSLContext部分,它说:

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

标准名称文档中也提到了这一点.

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

如果你想要一个特定的协议集用于连接,你应该使用SSLSocketSSLEnginesetEnabledProtocols方法.否则,它将使用默认值,如Providers文档中所述.


小智 1

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

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