JDK/JRE 版本是否单独确定 SSLSocket.getSupportedProtocols() 的结果?

Does the JDK/JRE version alone determine the result of SSLSocket.getSupportedProtocols()?

JDK/JRE 版本是否单独确定 SSLSocket.getSupportedProtocols() 的结果?或者是否有任何其他 configuration/startup 参数会影响此结果?

例如,如果应用程序 运行 JDK 1.7 update 21,此方法将 return [SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2] .但是,如果 JDK 1.8 上的应用程序 运行 不支持 SSLv3,那么此方法是否 return 仅 [TLSv1,TLSv1.1,TLSv1.2]?

而且我假设这个问题的答案也适用于默认启用列表。例如,在 JDK 1.7 update 21 中,SSLSocket.getEnabledProtocols() 默认 returns [SSLv3, TLSv1]。因此,对于 JDK 1.8,默认启用列表是否为 [TLSv1.1,TLSv1.2]?

没有

在 Java 7 之前,您只能 jdk.certpath.disabledAlgorithms 禁用算法。

从 Java 7 的更高版本开始,您还有 jdk.tls.disabledAlgorithms。两者的区别好像是jdk.tls.disabledAlgorithms也可以限制TLS/SSL版本。

jdk.tls.legacyAlgorithms也存在。只有在拒绝所有其他允许的协议后,才会使用此列表中的协议。

在 Java 8u51 中,这些(在 Java 的 lib/security/java.security 文件中找到)的默认值是:

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

jdk.tls.disabledAlgorithms=SSLv3, DH keySize < 768

jdk.tls.legacyAlgorithms= \
        K_NULL, C_NULL, M_NULL, \
        DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_anon_EXPORT, DH_DSS_EXPORT, \
        DH_RSA_EXPORT, RSA_EXPORT, \
        DH_anon, ECDH_anon, \
        RC4_128, RC4_40, DES_CBC, DES40_CBC