在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
答案 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
错误已解决。