我有一个 Java 应用程序,它连接到 IMAP 存储并检查消息。它在 AWS 上的 Ubuntu 20.04.2 LTS focus 上运行。它在 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
我刚刚降级回 OpenJDK 11.0.7 2020-04-14,一切恢复正常。
版本 11.0.7 和 11.0.11 之间在 java.security 策略或支持的密码方面是否发生了重大变化?
除了将版本保持在 11.0.7 之外,还有其他方法可以解决这个问题吗?
答案1
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,但没有任何较新的、当前推荐的版本。