【问题标题】:Java mail TLS authentcationJava 邮件 TLS 身份验证
【发布时间】:2013-05-25 18:55:08
【问题描述】:

我正在尝试掌握 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 还是很陌生,我看过很多关于这个的文章,但我找不到我的问题的黑白答案。

【问题讨论】:

  • 我遇到了同样的问题(请参阅我的问题:stackoverflow.com/questions/31179399/…)。我试图了解您如何设法以编程方式获取 SMTP 服务器的 ssl/tls 证书并对其进行验证?谢谢。

标签: java email ssl smtp jakarta-mail


【解决方案1】:

您的客户端(在您的情况下是在网络服务器上运行的客户端)需要验证邮件服务器的 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

【讨论】:

  • @user1960804 如果回答解决了您的问题,请点击接受按钮
  • 我会的,我需要先测试一下,几小时后不用担心。
【解决方案2】:

答案在JavaMail FAQ

来自链接网站的引用文本:

问:通过 SSL 连接到我的邮件服务器时,我收到一个异常,例如“无法找到请求目标的有效证书路径”。

答:您的服务器可能使用的是测试证书或自签名证书,而不是由商业证书颁发机构签名的证书。您需要将服务器的证书安装到您的信任库中。 InstallCert 程序会有所帮助。

或者,您可以将“mail.protocol.ssl.trust”属性设置为邮件服务器的主机名。有关详细信息,请参阅协议提供程序包的 javadocs。

此问题的其他常见原因是:

  • 防火墙或防病毒程序拦截了您的请求。
  • 您的 JDK 安装出现问题,无法找到受信任的证书颁发机构的证书。
  • 您正在运行的应用程序服务器已覆盖 JDK 的受信任证书颁发机构列表。

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2017-01-29
    • 2016-07-09
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多