Java 邮件 TLS 身份验证

标签 java email ssl smtp jakarta-mail

我正在尝试掌握 Java Mail API 和 TLS 的基础知识。我有以下场景:

有一个使用 TLS 和 SSL 的 STMP 服务器。如果我使用某些客户端登录到此服务器,我可以毫无问题地发送经过身份验证和验证的电子邮件。

然后我尝试在另一台机器上运行 Web 服务器,该服务器使用前面提到的 SMTP 服务器发送邮件。我仍然想发送 TLS 和 SSL 电子邮件,但是无论我如何配置启动属性,我都会收到以下众所周知的错误:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我发现很多人都有类似的问题,但我的问题是:

考虑到前面描述的场景,我是否必须为 Web 服务器获取某种证书(可能在 JRE 中的某处),或者它是否应该正常工作,因为邮件服务器已经运行了该证书和身份验证机制。不应该只使用 SMTP 服务器的证书吗?无论如何,如果我必须将证书安装到使用 STMP 服务器的机器上,我该如何获得该证书?

我是 JavaMail API 的新手,我看过很多关于此的文章,但我找不到我的问题的黑白答案。

最佳答案

您的客户端(在您的情况下是在网络服务器上运行的客户端)需要验证邮件服务器的 SSL 证书。您的 java 信任库似乎不包含该证书。

因此,您要么需要将该证书放入 JRE 的默认信任库(我不推荐这样做),要么为您的应用程序定义不同的信任库(当然需要包含邮件服务器证书)。为此,请设置此 VM 参数:Djavax.net.ssl.trustStore=<path-to-truststore>

编辑:啊,我漏掉了你问题的一部分。 要获取邮件服务器的证书,请使用类似 openssl 的东西。参见示例: https://serverfault.com/questions/139728/how-to-download-ssl-certificate-from-a-website

关于Java 邮件 TLS 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16832098/

相关文章:

java - 如何在java中将 HashMap 的哈希值转换为json

java - 在listview中选择checkall来勾选所有的checkbox

java - 动画期间屏幕闪烁白色

ios - 导出 P12 证书问题

java - Apache http 客户端自签名证书

java - 为什么我的列表没有在 JAXB 中序列化?

Html 电子邮件对齐文本和图像

php - 通过 PHP 通过电子邮件发送动态创建的 PDF

c# - 奇尔卡特 : How to decrypt an encrypted email?

python - Dropbox Python SDK SSL 错误