无法从 tomcat 应用程序发送电子邮件

无法从 tomcat 应用程序发送电子邮件

我的服务器遇到了一些问题,我们在 Vmware ESXI 6.5 的 ubuntu 18.04 虚拟机中运行,并使用 pfSense 防火墙作为另一个虚拟机,我们有多个 tomcat 实例在运行,没有任何问题。

在过去的几天里,java 应用程序突然停止发送电子邮件并返回“无法将套接字转换为 TLS”。我尝试在另一台托管在家中的 vmware 服务器上进行复制,使用相同的结构,但遇到了同样的问题。

有人告诉我这可能是来自 java 的 cacerts。尝试应用 update-ca-certificates 和 update-ca-certificates。在我的家庭服务器中,它可以正常工作,所有电子邮件都可以毫无问题地发送,但是当我在生产 vmware 服务器(由 IBM 裸机托管)中应用它时,它不起作用。

最不寻常的是,这种情况发生在任何 smtp 服务器(gmail 和其他服务器)上。我们使用带有 TLS 和端口 587 的所有电子邮件。

有什么想法可以解决此类问题,或者有什么解决方法?

谢谢

答案1

该问题出在 Java 的最新版本上。

我已经安装了openjdk 1.8.0_292,自 _291 以来,它不允许使用 TLS 1.0 和 1.1,这是 Gmail 直到今天默认使用的协议。

因此,为了能够在不安装其他版本的 Java 的情况下解决我的问题,我编辑了该文件 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security

并评论了该部分:

#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
#DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
#include jdk.disabled.namedCurves

并在后面添加以下部分:

jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
include jdk.disabled.namedCurves1

如您所见,java 已明确禁用某些协议,返回错误COULD NOT CONVERT SOCKET TO TLS。希望这能帮助其他可能遇到此问题的人。

附言:这完全不对,它只是对我有用,所以我们可以一边工作一边寻找其他替代方案。在巴西,我们使用一些尚未升级到 v1.3 的 smtp 服务器。

相关内容