从 OpenJDK 11.0.7 升级到 11.0.11 导致 SSLHandshakeException: No Appropriate protocol (协议已禁用或密码套件不合适)

jbx*_*jbx 4 java ssl openjdk ubuntu-20.04

我有一个连接到 IMAP 存储并检查消息的 Java 应用程序。它在 AWS 上的 Ubuntu 20.04.2 LTS 焦点上运行。它在 Java 11 (OpenJDK) 上运行。

一切正常,直到 2021 年 4 月 21 日,Java 版本自动更新到 OpenJDK 11.0.11。此时,重新启动应用程序后,我收到以下异常:

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
        at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:170)
        at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
        at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:221)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:433)
        at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)
        at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
        at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
        at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
        at com.sun.mail.iap.Protocol.<init>(Protocol.java:116)
        at com.sun.mail.imap.protocol.IMAPProtocol.<init>(IMAPProtocol.java:115)
        at com.sun.mail.imap.IMAPStore.newIMAPProtocol(IMAPStore.java:685)
        at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:636)
        ... 24 more
Run Code Online (Sandbox Code Playgroud)

我刚刚在 2020-04-14 降级回 OpenJDK 11.0.7,一切恢复正常。

在版本 11.0.7 和 11.0.11 之间,java.security 策略或支持的密码是否发生了重大变化?

除了保留 11.0.7 版本之外,还有其他方法可以解决此问题吗?

Ben*_*n N 5

OpenJDK 11.0.11(更新日志)解决了JDK-8202343问题,默认禁用对 TLS 版本 1.0 和 1.1 的支持:

TLS 1.0 和 1.1 是不再被认为安全的 TLS 协议版本,已被更安全和现代的版本(TLS 1.2 和 1.3)取代。

这些版本现在已默认禁用。jdk.tls.disabledAlgorithms如果您遇到问题,您可以通过从配置文件的安全属性中删除“TLSv1”和/或“TLSv1.1”来重新启用这些版本(风险自负)java.security

您的mail.imap.ssl.protocols属性设置(感谢 dave_thompson_085 提到这一点)和/或您尝试连接的 IMAP 服务器可能启用了 TLS 1.0 或 1.1,但没有启用任何较新的当前推荐版本。

  • 由于异常发生在发送 ClientHello 之前,所以问题不是实际的服务器(至少现在还不是),而是 [可能是 javamail 配置,例如 mail.imap.ssl.protocols](https://github.com/javaee/javamail/blob /master/mail/src/main/java/com/sun/mail/util/SocketFetcher.java#L582) (2认同)