gpt4 book ai didi

java - DH ServerKeyExchange 不符合算法约束

转载 作者:行者123 更新时间:2023-12-04 22:38:12 24 4
gpt4 key购买 nike

我们最近升级了我们的一个工具(使用 java 实现),现在它很难连接到我们公司的一个内部端点。对于其他端点,它工作正常。假设它不起作用的端点是 xyz.abc.com
我们每次看到的错误是

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.security 文件下修改或其他地方来修复这个烦人的错误。我们不想更改该端点使用的证书上的任何内容。
我是密码学的新手,因此在这里的任何帮助或建议都将一如既往地受到赞赏。

最佳答案

就像分享给那些也遇到同样问题并且没有运气改变一个值的人。
很有可能

  • 您的端点的证书使用 DH key 大小 1024。
  • 在 java.security 中,jdk.tls.disabledAlgorithms 设置为禁用 DH keySize < 2048

  • 在这种情况下,包含“jdk.tls.disabledAlgorithms=DH keySize < 1024”的原始解决方案有效。
    在类似 Linux 的环境中,您可以验证用于签署主机证书的 DH key 大小。
    openssl s_client -connect <host>:<port> -msg
    你应该从上面的结果中找到这一行

    Server Temp Key: DH, 1024 bits


    对于那些发现单独更新 java.security 文件并没有成功的人来说,很可能有一个外部文件覆盖了某些设置。在 java.security 中查找以下设置。要么将此配置设置为 false,要么像原始帖子一样更新外部文件。

    security.overridePropertiesFile=true


    虽然 Oracle 不鼓励使用较弱的加密算法,但是否/何时遵循套件取决于您。
    Oracle JRE and JDK Cryptographic Roadmap

    关于java - DH ServerKeyExchange 不符合算法约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64989823/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com