如何强制JavaMailSenderImpl使用TLS1.2?

时间:2017-11-07 19:58:07

标签: java email smtp tls1.2

在Tomcat上运行JDK7应用程序,它确实有以下环境设置:

-Dhttps.protocols=TLSv1.1,TLSv1.2 

上述设置可确保在进行API调用等时通过HTTPS连接时不使用TLS 1.0。

我们还使用org.springframework.mail.javamail。 JavaMailSenderImpl 类发送外发SMTP电子邮件,并使用这些道具:

 mail.smtp.auth=false;mail.smtp.socketFactory.port=2525;mail.smtp.socketFactory.fallback=true;mail.smtp.starttls.enable=true

问题是当SMTP电子邮件服务器升级到TLS1.2时,与SMTP电子邮件服务器的连接失败。

  

javax.net.ssl.SSLHandshakeException:远程主机关闭连接   在握手期间

是否存在强制执行TLS1.2协议的设置或代码更改?

我做了一些搜索,看起来这些env设置仅适用于applet和Web客户端,而不适用于服务器端应用

-Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false

3 个答案:

答案 0 :(得分:5)

这是对下一个人的修复:

mail.smtp.starttls.enable = TRUE; mail.smtp.ssl.protocols = TLSv1.2工作;

答案 1 :(得分:4)

在一个相当老的应用程序中它对我不起作用,我不知道为什么。经过研究,我发现应用程序依赖项中的javax.mail版本为1.4。您必须至少升级到1.5。

答案 2 :(得分:1)

就我而言,我需要 Vojtech Zavrel 和 Sunny 的回答。我正在运行 Java 1.8 Spring Boot 1.2.5 并在 Big Sur 11.2.3 和 spring 版本 4.2.1.RELEASE 上运行。

在我像这样更新我的依赖项之后

<dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.5.0-b01</version>
</dependency>

我用

更新了我的JavaMailSenderImpl
Properties prop = new Properties();
prop.setProperty("mail.smtp.auth", "true");
prop.setProperty("mail.smtp.starttls.enable", "true");
prop.setProperty("mail.smtp.ssl.protocols", "TLSv1.2"); // Added this line
prop.setProperty("mail.smtp.ssl.trust", mailUri.getHost());
mailSender.setJavaMailProperties(prop);

我看到 Received fatal alert: protocol_version 错误已解决。