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]吗?
答案 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