首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Jdk11中支持哪一组密码算法,以及哪一种算法最适合与TLSv1.2一起使用

在Jdk11中支持哪一组密码算法,以及哪一种算法最适合与TLSv1.2一起使用
EN

Stack Overflow用户
提问于 2019-05-24 06:25:08
回答 1查看 10K关注 0票数 3

我正在JDK11环境中运行我的JDK11应用程序。我使用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支持的密码,请参考jdk 1.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(javax.net.ssl.SSLHandshakeException in JDK11)。这就是为什么我试图改变我的密码套件算法,同样,我想知道我可以在JDK11环境中使用哪种算法。如果我也了解由jdk11和jdk8支持的密码,这将是有帮助的。请帮我一把。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-05-24 08:56:35

关于订正Q:

您的第一个链接是(Oracle,因此也是OpenJDK) java 7,而不是8;TLS加密套件支持在7和8之间存在差异,尽管不影响您命名的加密套件。您的“最多1.8”链接是用于IBM的,它使用不同的密码提供者,对于Oracle/OpenJDK密码来说不是很好的文档。注意,链接上的问题是“. IBM支持的密码套件”--而不是Oracle/OpenJDK。对于Oracle/OpenJDK 8,请参见https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#ciphersuites,而对于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,正如我在Oracle11.0.2中所预期的那样,以及8的许多版本。所有在8中支持的TLSv1.2加密套件仍然在11中支持,尽管11还支持TLSv1.3 (显然您没有使用它)。

除了正如评论所指出的那样,Java默认值通常比那些不知道自己在做什么的人在提供安全性方面做得更好,这是您在另一个Q中报告的例外(但这里没有提供)

代码语言:javascript
运行
复制
 javax.net.ssl.SSLHandshakeException: Invalid ECDH ServerKeyExchange signature

不会以任何方式表示不支持您命名的密码套件。首先,请明确您的应用程序是TLS客户端还是服务器--即使应用程序协议中没有客户机/服务器关系,TLS协议中也始终存在;TLS (以及它之前的SSL )就是这样定义的。其次,通过使用系统属性遵循SSL/TLS=JSSE调试的标准说明运行javax.net.debug=ssl并显示输出结果(可能是最后100行左右,因为它很长)。

最初的Q是模糊的,似乎是关于RC4,但实际上并非如此。

您的问题文本没有给出什么‘密码套件算法’你的意思,但你标记了RC4-密码。如果您的问题是使用在TLS 1.2或更高版本中包含RC4的(任何)密码套件,那么您就不应该使用。RC4被RFC7465于2015年2月禁止使用TLS,因为对它的密码分析攻击进展很快。这适用于2015年存在的所有版本的TLS协议(1.0、1.1和1.2),并由所有受支持的Java版本实现:8版本从8u60开始,以及所有版本的9版本及更高版本。

如果您真的想使用RC4并冒着攻击者窃取您的数据的风险--也许它实际上是假的、无意义的,或者是没有价值的--可以更改java.security文件中的设置,或者在程序的早期(加载JSSE之前)调用Security.setProperty;请参阅JSSE参考指南例如对于Java11。注在j8中,文件位置是不同的,<JREhome>/lib/security/java.security。另见Java 8更新后的RC4相关问题

如果您(希望或需要)使用Java 11和更高版本支持的TLS1.3,则这不再是一个选项。TLS1.3只支持AEAD密码(或模式),而RC4最初定义的方式并不支持,今天也不会接受基于RC4的AEAD构造方案。

另一方面,如果您只想使用好的、安全的密匙,不要更改任何东西,只需使用默认值。默认值是缺省值,这正是因为它们是安全的,至少就目前所知而言是这样。如果分析进展改变了这一点,那么缺陷就会相应地改变,并且您使用它们的程序也将是安全的,而无需您制作、测试、分发和验证新的版本。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56286934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档