邮件api中的ssl错误

时间:2014-09-15 05:49:42

标签: java email ssl

在尝试使用java中的邮件api发送电子邮件后显示错误?

Caused by: 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
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1836)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1337)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:966)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1262)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1289)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1273)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:549)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:354)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1928)

我该如何解决这个问题

2 个答案:

答案 0 :(得分:0)

无法验证服务器证书。您必须向JVM提供CA根证书才能使用给定的服务器证书。

您可以将CA根证书添加到Java安装中的文件cacerts.jks(如果不覆盖cacerts)。如果您从程序中覆盖cacerts,则必须将CA根证书添加到提供的cacerts

答案 1 :(得分:0)

您的服务器可能使用的是测试证书或自签名证书,而不是商业证书颁发机构签署的证书。您需要将服务器的证书安装到您的信任存储区。 InstallCert计划将有所帮助。

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

您可以找到更多详情here