这是我不久前写的一个相当详细的答案,描述了 SSL 和 TLS 之间的区别。简而言之,TLS 是 SSL 的继承者,TLS 1.0 可以认为是“SSL 3.1”。
如果您查看JSSE 参考指南,在 SSLContext 部分中,它说:
这些静态方法每个都返回一个实例,该实例至少实现了所请求的安全套接字协议。返回的实例也可以实现其他协议。例如,getInstance("TLSv1") 可能会返回实现“TLSv1”、“TLSv1.1”和“TLSv1.2”的实例。
标准名称文档中也提到了这一点。
特别是,如果您检查SSLContextImpl的 Oracle/OpenJDK 7 源代码,您会发现它的所有SSLContext
s 都支持所有协议(从使用 SSLv2 Client Hello 的 SSLv3 到 TLS 1.2)。不同的是默认启用哪些协议。此外,一般情况下,您不应该依赖它,因为其他 Java 实现(例如 IBM JRE)的行为可能会有所不同。
如果您希望将一组特定的协议用于连接,您应该使用SSLSocket
orSSLEngine
的setEnabledProtocols
方法。否则,它将使用默认值,如Providers 文档中所述。