Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到请求目标的有效证书路径_Java_Web Applications_Gwt_Ssl_Smtp - Fatal编程技术网

Java 找不到请求目标的有效证书路径

Java 找不到请求目标的有效证书路径,java,web-applications,gwt,ssl,smtp,Java,Web Applications,Gwt,Ssl,Smtp,可能重复: 我有个问题。已经挣扎了很长时间。 这是我的密码: 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 sta

可能重复:

我有个问题。已经挣扎了很长时间。 这是我的密码:

    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 = "user@XYZ.com";
    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("user@.XYZ.pl", "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!");
    }
}
我的证书有问题。 以下是我已经完成的步骤:

  • 我使用浏览器下载了证书,并将其保存为cert.cer
  • 我使用了这个命令:keytool-import-trustcacerts-keystorecacerts-storepass changeit-noprompt-file cert.cer
  • 我使用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
    
    我使用GWT,所以我将cacerts复制到我的WEB-INF文件夹中


    使用
    javax.net.ssl.truststore
    属性指定的Java信任库不使用类加载器加载,因此将其放置在类路径中对结果没有影响。您需要在
    System.setProperty
    调用中指定信任库的绝对路径。

    好的,我接着说,但现在我得到以下错误:调试SMTP:异常读取响应:javax.net.ssl.SSLException:java.lang.RuntimeException:意外错误:java.security.invalidalgorithParameterException:trustAnchors参数必须为非空,因为信任库路径仍然不正确,因为这条新消息是另一种说法,即信任商店无法打开。我不明白。我将绝对路径放在cacerts上(使用C:\…),然后再次收到此错误“无法找到请求目标的有效认证路径”。我想我试过了所有可能的方法。