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

时间:2015-07-20 19:28:48

标签: java ssl jsse

JDK / JRE版本是否仅确定SSLSocket.getSupportedProtocols()的结果?或者是否有任何其他配置/启动参数可能影响此结果?

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

我认为这个问题的答案也适用于默认启用列表。例如,在JDK 1.7 update 21中,SSLSocket.getEnabledProtocols()默认返回[SSLv3,TLSv1]。那么使用JDK 1.8,默认启用列表是[TLSv1.1,TLSv1.2]吗?

1 个答案:

答案 0 :(得分: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