在尝试使用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)
我该如何解决这个问题
答案 0 :(得分:0)
无法验证服务器证书。您必须向JVM提供CA根证书才能使用给定的服务器证书。
您可以将CA根证书添加到Java安装中的文件cacerts.jks
(如果不覆盖cacerts
)。如果您从程序中覆盖cacerts,则必须将CA根证书添加到提供的cacerts
。
答案 1 :(得分:0)
您的服务器可能使用的是测试证书或自签名证书,而不是商业证书颁发机构签署的证书。您需要将服务器的证书安装到您的信任存储区。 InstallCert计划将有所帮助。
或者,您可以设置" mail.protocol.ssl.trust"属性到邮件服务器的主机名。有关详细信息,请参阅协议提供程序包的javadoc。
您可以找到更多详情here