【问题标题】:javax Could not convert socket to TLS;javax 无法将套接字转换为 TLS;
【发布时间】:2021-10-06 00:05:53
【问题描述】:

我在使用 Javax 发送邮件时遇到问题。我们使用 gmail 大约 4 年从我们的 Java 软件发送邮件。现在我收到以下错误:

Exception in thread "main" java.lang.RuntimeException: 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 SendEmail.sendMissingMailWeek(SendEmail.java:233)
    at main.negVerkaeufeMailenWeek(main.java:368)
    at main.main(main.java:79)
Caused by: 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)
    at javax.mail.Service.connect(Service.java:317)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at SendEmail.sendMissingMailWeek(SendEmail.java:226)
    ... 2 more
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
    at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)
    at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
    at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
    at com.sun.mail.util.SocketFetcher.startTLS(SocketFetcher.java:486)
    at com.sun.mail.smtp.SMTPTransport.startTLS(SMTPTransport.java:1902)
    ... 9 more

Process finished with exit code 1

这些是我的 gmail 设置:

            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.ssl.trust", "smtp.gmail.com");
            props.put("mail.smtp.debug", "true");

我也尝试了其他邮件服务器(O365,Strato),但得到了同样的错误。

【问题讨论】:

  • 不确定这是否会有所帮助,但尝试传递 -Djdk.tls.client.protocols=TLSv1.2-Djavax.net.debug=all 可能会显示更多信息
  • 我的客户端应用程序出现同样的问题。几周前还在工作,现在报错了。
  • @ryvantage 您是否尝试过在邮件配置中提供协议信息?我的意思是,请尝试在您的邮件中包含以下代码propsprops.put("mail.smtp.ssl.protocols", "TLSv1.2")。此外,尝试调整端口465587,以及配置属性mail.smtp.starttls.required。我希望它有所帮助。
  • 请考虑阅读this related google 群组文章,它也会有所帮助。
  • 请问,您能否提供有关您的 jdk 和 java 邮件版本的更多信息?我测试了电子邮件与您的配置的集成,它工作正常。也许,问题可能与您的客户端运行的环境有关?

标签: java email gmail


【解决方案1】:

该错误表明与建立与邮件服务器的安全连接所需的 TLS 协议相关的一些问题。

正如您在问题 cmets 中看到的那样,问题可能是由许多不同的事情引起的。在不知道您的操作系统、JDK 和 JavaMail 库版本的情况下,我们只能访问真正的原因。

@g00se 给了你一个很好的建议:请尝试通过提供以下选项在启用 SSL 调试的情况下运行你的程序:

-Djavax.net.debug=all

此外,请尝试在您的配置属性中明确包含 TLS 协议,这可能会有所帮助:

props.put("mail.smtp.ssl.protocols", "TLSv1.2");

无论如何,对于您指出的症状,并且由于AFAIK Google最近没有更改任何相关配置,您的问题可能与JDK发行版中引入的a change有关,以便默认禁用不安全的 TLS 协议版本:

安全库/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 配置文件中的安全属性。

正如您在 bug description 中看到的,更改已被反向移植到不同的 JDK 版本。

也许您升级了 JDK 并提出了问题。

如果是这种情况,请尝试编辑您的 java.security 配置文件并从 jdk.tls.disabledAlgorithms 安全属性中删除 TLSv1 和/或 TLSv1.1

【讨论】:

  • JDK 的变化是问题所在。使用props.put("mail.smtp.ssl.protocols", "TLSv1.2"); 有效。
  • 太棒了@ryvantage!!我很高兴听到您能够解决问题并且答案很有帮助。非常感谢。
  • 对于我来说,从 AdoptOpenJDK 15 到 Zulu JDK 17 的更改引发了这个问题。使用props.put("mail.smtp.ssl.protocols", "TLSv1.2"); 也为我解决了这个问题。
  • 如果您使用的是旧的 java 版本或 servlet,请使用“TLSv1.2”
【解决方案2】:

我发现一篇文章有​​相同的错误信息但尚未发布:

postfix and openJDK 11: "No appropriate protocol (protocol is disabled or cipher suites are inappropriate)"

答案是:

JavaMail 从 1.4.7 升级到 1.6.2 后错误消失了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2013-04-13
    • 1970-01-01
    • 2013-06-22
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多