java DH ServerKeyExchange不符合算法约束
我们最近升级了一个工具(使用java实现),现在很难连接到我们公司的一个内部端点。对于其他端点,它可以正常工作。假设它不工作的端点是xyz。美国广播公司。通用域名格式 我们每次看到的错误是
javax.net.ssl.SSLHandshakeException: DH ServerKeyExchange does not comply to algorithm constraints
at sun.security.ssl.Alert.createSSLException(Alert.java:131)
at sun.security.ssl.Alert.createSSLException(Alert.java:117)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:311)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
at sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
at sun.security.ssl.DHServerKeyExchange$DHServerKeyExchangeConsumer.consume(DHServerKeyExchange.java:540)
at sun.security.ssl.ServerKeyExchange$ServerKeyExchangeConsumer.consume(ServerKeyExchange.java:111)
at sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:377)
at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
at sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
at sun.security.ssl.TransportContext.dispatch(TransportContext.java:182)
at sun.security.ssl.SSLTransport.decode(SSLTransport.java:149)
at sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1143)
at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1054)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:394)
at sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:708)
at sun.security.ssl.SSLSocketImpl.access$100(SSLSocketImpl.java:72)
at sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:961)
at sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:933)
What does "Reason: DHPublicKey does not comply to algorithm constraints" mean?
然而,这似乎不起作用
由于这个问题现在只在我们升级工具之后才普遍存在,我们想知道这是否是由于新的jvm安全限制被强制执行的缘故,所以我们是否可以将任何东西作为jvm参数传递,或者只是在java下进行修改。安全文件或其他文件来修复此恼人的错误。我们不想更改该端点使用的证书上的任何内容。 我是一名密码学新手,因此,如有任何帮助或建议,我们将一如既往地不胜感激
# 1 楼答案
我可以通过修改java加密策略来解决这个问题:
对于DHKeySize,我不得不将2048替换为1024
# 2 楼答案
就像分享给那些遇到同样问题的人一样,他们没有机会改变一个价值观
很有可能
在这种情况下,包含“jdk.tls.disabledAlgorithms=DH keySize<;1024”的原始解决方案起到了作用
在类似Linux的环境中,您可以验证用于签署主机证书的DH keysize
你应该从上面的结果中找到这条线
对于那些发现更新java的人。安全文件本身并不能解决这个问题,可能有一个外部文件覆盖了某些设置。在java中查找以下设置。安全要么将此配置设置为false,要么像原始帖子那样更新外部文件
虽然Oracle不鼓励使用更弱的加密算法,但是否/何时使用该套件取决于您
Oracle JRE and JDK Cryptographic Roadmap