unable to find valid certification path to requested target

Posted 268lwc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unable to find valid certification path to requested target相关的知识,希望对你有一定的参考价值。

[WARNING] Could not transfer metadata org.sonarsource.sonar-packaging-maven-plugin:sonar-packaging-maven-plugin/maven-metadata.xml from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

使用技术:maven   仓库:阿里云

如果报上边那个错误,有多种情况,最直接的方法就是换仓库,可以换国内的或国外的,

国内的下载快,但第三方可能存在验证问题;国外的下载较慢,其实也不是很慢,推荐国外使用maven官方的。

首先说一下我最后的解决方法。

我的方法一:

技术图片

 打开idea---》setting---》runnner

在vm options中添加:-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true     中间用空格隔开

根据网上搜查,大致还有以下几个方案,不过我尝试都没效果

1.删除本地仓库依赖(我删除了本地仓库,没有效果,反而使项目依赖全都没有,一堆爆红)

2.判斷是连到 repo.maven.apache.org 的时候凭证未信任.

  1 /*
  2  * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
  3  *
  4  * Redistribution and use in source and binary forms, with or without
  5  * modification, are permitted provided that the following conditions
  6  * are met:
  7  *
  8  *   - Redistributions of source code must retain the above copyright
  9  *     notice, this list of conditions and the following disclaimer.
 10  *
 11  *   - Redistributions in binary form must reproduce the above copyright
 12  *     notice, this list of conditions and the following disclaimer in the
 13  *     documentation and/or other materials provided with the distribution.
 14  *
 15  *   - Neither the name of Sun Microsystems nor the names of its
 16  *     contributors may be used to endorse or promote products derived
 17  *     from this software without specific prior written permission.
 18  *
 19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 30  */
 31 /**
 32  * Originally from:
 33  * http://blogs.sun.com/andreas/resource/InstallCert.java
 34  * Use:
 35  * java InstallCert hostname
 36  * Example:
 37  *% java InstallCert ecc.fedora.redhat.com
 38  */
 39 
 40 import javax.net.ssl.*;
 41 import java.io.*;
 42 import java.net.Socket;
 43 
 44 import java.security.KeyStore;
 45 import java.security.MessageDigest;
 46 import java.security.cert.CertificateException;
 47 import java.security.cert.X509Certificate;
 48 
 49 /**
 50  * Class used to add the server‘s certificate to the KeyStore
 51  * with your trusted certificates.
 52  */
 53 public class InstallCert {
 54 
 55     public static void main(String[] args) throws Exception {
 56         String host;
 57         int port;
 58         char[] passphrase;
 59         if ((args.length == 1) || (args.length == 2)) {
 60             String[] c = args[0].split(":");
 61             host = c[0];
 62             port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
 63             String p = (args.length == 1) ? "changeit" : args[1];
 64             passphrase = p.toCharArray();
 65         } else {
 66             System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");
 67             return;
 68         }
 69 
 70         File file = new File("jssecacerts");
 71         if (file.isFile() == false) {
 72             char SEP = File.separatorChar;
 73             File dir = new File(System.getProperty("java.home") + SEP
 74                     + "lib" + SEP + "security");
 75             file = new File(dir, "jssecacerts");
 76             if (file.isFile() == false) {
 77                 file = new File(dir, "cacerts");
 78             }
 79         }
 80         System.out.println("Loading KeyStore " + file + "...");
 81         InputStream in = new FileInputStream(file);
 82         KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
 83         ks.load(in, passphrase);
 84         in.close();
 85 
 86         SSLContext context = SSLContext.getInstance("TLS");
 87         TrustManagerFactory tmf =
 88                 TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
 89         tmf.init(ks);
 90         X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
 91         SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
 92         context.init(null, new TrustManager[]{tm}, null);
 93         SSLSocketFactory factory = context.getSocketFactory();
 94 
 95         System.out.println("Opening connection to " + host + ":" + port + "...");
 96         SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
 97         socket.setSoTimeout(10000);
 98         try {
 99             System.out.println("Starting SSL handshake...");
100             socket.startHandshake();
101             socket.close();
102             System.out.println();
103             System.out.println("No errors, certificate is already trusted");
104         } catch (SSLException e) {
105             System.out.println();
106             e.printStackTrace(System.out);
107         }
108 
109         X509Certificate[] chain = tm.chain;
110         if (chain == null) {
111             System.out.println("Could not obtain server certificate chain");
112             return;
113         }
114 
115         BufferedReader reader =
116                 new BufferedReader(new InputStreamReader(System.in));
117 
118         System.out.println();
119         System.out.println("Server sent " + chain.length + " certificate(s):");
120         System.out.println();
121         MessageDigest sha1 = MessageDigest.getInstance("SHA1");
122         MessageDigest md5 = MessageDigest.getInstance("MD5");
123         for (int i = 0; i < chain.length; i++) {
124             X509Certificate cert = chain[i];
125             System.out.println
126                     (" " + (i + 1) + " Subject " + cert.getSubjectDN());
127             System.out.println("   Issuer  " + cert.getIssuerDN());
128             sha1.update(cert.getEncoded());
129             System.out.println("   sha1    " + toHexString(sha1.digest()));
130             md5.update(cert.getEncoded());
131             System.out.println("   md5     " + toHexString(md5.digest()));
132             System.out.println();
133         }
134 
135         System.out.println("Enter certificate to add to trusted keystore or ‘q‘ to quit: [1]");
136         String line = reader.readLine().trim();
137         int k;
138         try {
139             k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
140         } catch (NumberFormatException e) {
141             System.out.println("KeyStore not changed");
142             return;
143         }
144 
145         X509Certificate cert = chain[k];
146         String alias = host + "-" + (k + 1);
147         ks.setCertificateEntry(alias, cert);
148 
149         OutputStream out = new FileOutputStream("jssecacerts");
150         ks.store(out, passphrase);
151         out.close();
152 
153         System.out.println();
154         System.out.println(cert);
155         System.out.println();
156         System.out.println
157                 ("Added certificate to keystore ‘jssecacerts‘ using alias ‘"
158                         + alias + "‘");
159     }
160 
161     private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
162 
163     private static String toHexString(byte[] bytes) {
164         StringBuilder sb = new StringBuilder(bytes.length * 3);
165         for (int b : bytes) {
166             b &= 0xff;
167             sb.append(HEXDIGITS[b >> 4]);
168             sb.append(HEXDIGITS[b & 15]);
169             sb.append(‘ ‘);
170         }
171         return sb.toString();
172     }
173 
174     private static class SavingTrustManager implements X509TrustManager {
175 
176         private final X509TrustManager tm;
177         private X509Certificate[] chain;
178 
179         SavingTrustManager(X509TrustManager tm) {
180             this.tm = tm;
181         }
182 
183         public X509Certificate[] getAcceptedIssuers() {
184        
185         /** 
186          * This change has been done due to the following resolution advised for Java 1.7+
187         http://infposs.blogspot.kr/2013/06/installcert-and-java-7.html
188                 **/ 
189         
190         return new X509Certificate[0];    
191             //throw new UnsupportedOperationException();
192         }
193 
194         public void checkClientTrusted(X509Certificate[] chain, String authType)
195                 throws CertificateException {
196             throw new UnsupportedOperationException();
197         }
198 
199         public void checkServerTrusted(X509Certificate[] chain, String authType)
200                 throws CertificateException {
201             this.chain = chain;
202             tm.checkServerTrusted(chain, authType);
203         }
204     }
205 }

打包
$ javac InstallCert.java

執行
$ java InstallCert repo.maven.apache.org

他會問你
Enter certificate to add to trusted keystore or ‘q‘ to quit: [1]

輸入 1 ,之後會在執行目錄下生成 jssecacerts
將“jssecacerts”的文件放入JAVA_HOME/jre/lib/security目錄下
再進行maven編譯就可以了

以上是关于unable to find valid certification path to requested target的主要内容,如果未能解决你的问题,请参考以下文章

IDEA unable to find valid certification path to requested target

unable to find valid certification path to requested target

已解决Https请求报错:unable to find valid certification path to requested target

已解决Https请求报错:unable to find valid certification path to requested target

已解决Https请求报错:unable to find valid certification path to requested target

请求https错误: unable to find valid certification path to requested target