2011-09-08 40 views
6

Possible Duplicate:
PKIX path building failed: unable to find valid certification path to requested target無法找到要求的目標

有效證書路徑我有一個問題。已經很久沒有掙扎了。 這是我的代碼:

package com.XYZ.spr.server; 

import org.apache.commons.mail.Email; 
import org.apache.commons.mail.SimpleEmail; 

public class GeneratorMaili { 
    public static final String HOSTNAME = "smtp.XYZ.com"; 
    public static final String ADDRESS_FROM = "[email protected]"; 
    public static final String TOPIC= "Topic"; 

    public static void wyslijEmail(String reciver) throws Exception { 
     System.setProperty("javax.net.ssl.trustStore", "cacerts"); 
     System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 
     Email email = new SimpleEmail(); 
     email.setSmtpPort(587); 
//  email.setTLS(true); 
     email.setSSL(true); 
     System.out.println("fdfdf"); 
     email.setAuthentication("[email protected]", "pass"); 
     email.setDebug(true); 
     email.setHostName(HOSTNAME); 
     email.setFrom(ADDRESS_FROM); 
     email.setSubject(TOPIC); 
     email.setMsg("Test"); 
     email.addTo(reciver); 
     System.out.println(reciver); 
     email.send(); 
     System.out.println("Ok!"); 
    } 
} 

我有證書問題。 下面是我做的步驟:

  1. 我用我的瀏覽器有下載證書,我已經保存爲cert.cer
  2. 我用這個命令:keytool的-import -keystore -trustcacerts cacerts -storepass changeit -noprompt -file cert.cer
  3. 我使用GWT,所以我複製cacerts到我的WEB-INF文件夾。

不幸的是,越來越仍然收到此錯誤:

DEBUG SMTP: exception reading response: 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 
org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.XYZ.com:587 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1242) 
    at org.apache.commons.mail.Email.send(Email.java:1267) 
    at com.XYZ.spr.server.GeneratorMaili.wyslijEmail(GeneratorMaili.java:28) 
    at com.XYZ.spr.server.SprawozdaniaServiceImpl.addSprawozdanie(SprawozdaniaServiceImpl.java:123) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248) 
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:324) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
    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 com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1611) 
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1369) 
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412) 
    at javax.mail.Service.connect(Service.java:310) 
    at javax.mail.Service.connect(Service.java:169) 
    at javax.mail.Service.connect(Service.java:118) 
    at javax.mail.Transport.send0(Transport.java:188) 
    at javax.mail.Transport.send(Transport.java:118) 
    at org.apache.commons.mail.Email.sendMimeMessage(Email.java:1232) 
    ... 30 more 
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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source) 
    at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:110) 
    at java.io.BufferedInputStream.fill(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:88) 
    at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1589) 
    ... 38 more 
Caused by: 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.validator.PKIXValidator.doBuild(Unknown Source) 
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source) 
    at sun.security.validator.Validator.validate(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source) 
    ... 51 more 
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source) 
    at java.security.cert.CertPathBuilder.build(Unknown Source) 
    ... 57 more 

回答

1

I use GWT, so I copied cacerts to my WEB-INF folder.

使用未加載javax.net.ssl.trustStore財產使用的類加載器,從而將其放置在類路徑中的Java信任庫指定的無軸承上結果。您需要在調用System.setProperty時指定信任庫的絕對路徑。

+0

好吧,我繼續,但現在我得到以下錯誤:DEBUG SMTP:異常閱讀響應:javax.net.ssl.SSLException:java.lang.RuntimeException:意外的錯誤:java.security.InvalidAlgorithmParameterException:trustAnchors參數必須非空 – Mateusz

+0

根據[本頁](http://jcalcote.wordpress.com/2009/06/19/java-https-key-setup/),信任庫路徑仍然不正確,因爲新消息是另一種說法是信任庫無法打開的低溫方式。 –

+0

我不明白。我把cacerts的絕對路徑(使用C:\ ...),然後我再次收到這個錯誤「無法找到所需目標的有效證書路徑」。我想我測試了每條可能的道路。 – Mateusz

相關問題