当前位置: 首页 > 知识库问答 >
问题:

javax无法将套接字转换为TLS;

施彦
2023-03-14

我用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),但收到了相同的错误。

共有2个答案

范飞翰
2023-03-14

我发现了一篇文章,其中包含尚未发布的相同错误消息:

postfix和openJDK 11:“没有合适的协议(协议被禁用或密码套件不合适)”

答案是:

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

欧阳飞章
2023-03-14

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

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

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

-Djavax.net.debug=all

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

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

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

安全libs/javax.net。ssl
➜ 禁用TLS 1.0和1.1

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

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

正如您在错误描述中看到的,更改已向后移植到不同的JDK版本。

也许是您升级了JDK,然后出现了问题。

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

 类似资料:
  • 我有另一个转换套接字异常。Stackoverflow将我和相关答案联系起来,我已经做了人们建议的所有事情。 这里有异常描述: 线程“main”javax中出现异常。邮政MessaginException:无法将套接字转换为TLS;嵌套的例外是:java。网SocketException:java。安全NoSuchAlgorithmException:在com上构造实现时出错(算法:Default,

  • 我正在尝试通过Gmail SMTP服务器使用JavaMail发送电子邮件。代码如下: 返回此错误: 无法将套接字转换为TLS; 完整的堆栈跟踪: 异常线程"main"javax.mail.RuntimeException:ervice.connectMessagingException:无法将套接字转换为TLS;嵌套异常是:ervice.java:176SSLHandshakeException:

  • 我收到了错误:org.springframework.mail。MailSendException:邮件服务器连接失败;嵌套的异常是javax.mail。MessaginException:无法将套接字转换为TLS;嵌套的异常是:javax.net.ssl。SSLHandshakeException:没有合适的协议(协议被禁用或密码套件不合适)。失败的消息:javax.mail。MessaginE

  • 在一个应用程序中,我使用java实现了邮件发送逻辑。我使用了smtp.gmail。com587端口,具有有效的gmail id和密码。在开发环境中,一切正常。但在生产环境中,我需要使用不同的邮件服务器,例如smtp.xyz。在端口25上输入有效的电子邮件id和密码。 当我继续使用以下代码启用SSL时: 我出错了

  • 我想通过单击JFrame netbeans中的按钮将邮件从我的电子邮件地址发送到另一个电子邮件地址。这是代码, 但它给了我以下错误, javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:java.io.lOException:使用SSL套接字工厂类启动TLS中的异常null: host, portsmtp.gmail.com,587;异常:java.l

  • 我在使用Apache Commons Mail连接到SMTP服务器时遇到问题。我已经尝试了所有方法,但我唯一能在网上找到的是Java邮件。这是我的错误: 原因:javax.mail.MessagingException:无法将套接字转换为TLS;嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorExc