我正在JDK11环境中运行我的JDK8应用程序。 我正在使用TLSv1.2和TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384密码套件算法,我怀疑JDK11中不支持或禁用它。 有jvm支持的密码列表 请参阅https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html 另外,如果您在此处看到某人列出了受jdk最多支持jdk1.8的密码 https://developer.ibm.com/answers/questions/301898/where-i-can-find-list-of-cipher-suites-that-suppor/
但是我想知道jdk11支持/启用/禁用了哪种密码套件算法。 我正在使用TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384密码算法,但是当我尝试在jdk 11运行时环境中运行我的应用程序时,我得到了SSLHandshakeException(Getting javax.net.ssl.SSLHandshakeException in JDK11)。这就是为什么我尝试更改密码套件算法的原因,同样,我想知道我可以在JDK11环境中使用哪种算法。 如果我也了解jdk11和jdk8都支持的密码,将很有帮助。 请帮我。
谢谢。
答案 0 :(得分:4)
修改后的问题:
您的第一个链接是Java 7而不是Oracle(因此是OpenJDK)8; TLS密码套件支持在7和8之间存在 差异,尽管不会影响您命名的密码套件。 “ upto 1.8”的链接是针对 IBM Java的,该Java使用了不同的加密提供程序,对于Oracle / OpenJDK加密不是一个好的文档。请注意,该链接上的问题专门是“ ... IBM Java支持的密码套件”-不是Oracle / OpenJDK Java。对于Oracle / OpenJDK 8,请参见https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites,对于11/11,请参见https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#jsse-cipher-suite-names。两者都包括TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,并且可以预期在Oracle 11.0.2中对我有用。并且11仍然支持8中的许多版本。所有 TLSv1.2密码套件在11中仍然受支持,尽管另外11 < / em>支持TLSv1.3(您显然没有使用)。
除了上述事实外,Java默认值在提供安全性方面通常比不知道自己在做什么的人重写更好,此外,您在 other 中报告的异常问(但此处未提供)
javax.net.ssl.SSLHandshakeException: Invalid ECDH ServerKeyExchange signature
决不表示您所命名的密码套件不受支持。首先,请明确您的应用程序是TLS客户端还是服务器-即使 application 协议中没有客户端/服务器关系,但始终 TLS协议这就是定义的TLS(以及之前的SSL)的方式。
其次,通过运行系统属性javax.net.debug=ssl
来运行follow the standard instructions for SSL/TLS=JSSE debugging并显示结果输出(可能是最后100行左右,因为它非常庞大)。
最初的Q含糊不清,似乎与RC4有关,但实际上并非如此。
您的问题文字没有提供什么含义,但是您标记了RC4-cipher。如果您的问题是使用TLS 1.2或更早版本中包含RC4的(任何一种)密码套件,则您不应该这样做。 RFC7465 in Feb. 2015禁止 RC4进行TLS 使用,因为对它的密码分析攻击已迅速发展。这适用于2015年存在的所有版本的TLS协议(1.0、1.1和1.2),并且已通过所有受支持的Java版本(从8u60开始的8和更高版本的9和更高版本)实现。
如果您真的想使用RC4并冒着攻击者窃取您的数据的危险(可能实际上是虚假的,无意义的或其他无价值的),请更改java.security
文件中的设置或致电Security.setProperty
在程序的早期(在加载JSSE之前);请参阅《 JSSE参考指南e.g. for Java11》。请注意,j8中的文件位置不同,<JREhome>/lib/security/java.security
。另请参见RC4 related issue after Java 8 update。
如果并且当您(想要或需要)使用Java 11及更高版本支持的TLS 1.3时,就不再是此选项。 TLS 1.3仅支持AEAD密码(或模式),而最初定义的RC4则不支持,并且今天将不接受基于RC4的AEAD构造的建议。
另一方面,如果您只想使用安全可靠的密码套件,则不要更改任何内容,而只需使用默认值即可。缺省值是正是因为它们是安全的,至少在当前已知的范围内。如果分析的进步改变了现状,那么defauts将相应地进行更改,并且使用它们的程序也将是安全的,而无需制作,测试,分发和验证新版本。