首页 > 解决方案 > 我无法在 Ubuntu 服务器上发送电子邮件 [javax.net.ssl.SSLHandshakeException]

问题描述

我突然无法在 Unbuntu 服务器上发送电子邮件。

从今天开始就发生了。它仍在本地工作。

javax.mail.MessagingException: Could not convert socket to TLS;
nested exception is:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1907)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:666)

JAVA:
openjdk 版本“11.0.11” 2021-04-20
OpenJDK 运行环境(build 11.0.11+9-Ubuntu-0ubuntu2.20.04)
OpenJDK 64-Bit Server VM(build 11.0.11+9-Ubuntu-0ubuntu2.20.04 ) , 混合模式, 共享)

握手后新会话票证到达:
SSL- 会话:
协议:TLSv1.3
密码:TLS_AES_256_GCM_SHA384

标签: javalinuxspringemailssl

解决方案


您的服务器似乎使用 TLSv1.1 或更早版本,并且您最近将 Java 升级到版本 11.0.11。此版本的 Java 默认禁用 TLSv1.0 和 TLSv1.1,例如参见Oracle Java 11.0.11 发行说明(尽管 AFAIK 这适用于所有 OpenJDK 派生版本):

security-libs/javax.net.ssl
禁用 TLS 1.0 和 1.1

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

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

我建议您尝试TLSv1.1从文件中的jdk.tls.disabledAlgorithms属性中删除java.security是否可以解决您的问题,如果失败,请尝试删除TLSv1. 这表明您的邮件服务器需要更新或配置以支持更新和更安全的 TLS 版本。


推荐阅读