web-dev-qa-db-ja.com

「PKIXパスの作成に失敗しました」および「要求されたターゲットへの有効な証明書パスが見つかりません」

私は自分のJavaプロジェクトに Twitter4j libraryを使ってつぶやくことを試みています。初回実行時に、証明書Sun.security.validator.ValidatorExceptionおよびSun.security.provider.certpath.SunCertPathBuilderExceptionに関するエラーが発生しました。それから私はTwitterの証明書を追加しました:

C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"

しかし成功せずに。これがTwitterを取得する手順です。

public static void main(String[] args) throws TwitterException {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
        .setOAuthConsumerKey("myConsumerKey")
        .setOAuthConsumerSecret("myConsumerSecret")
        .setOAuthAccessToken("myAccessToken")
        .setOAuthAccessTokenSecret("myAccessTokenSecret");

    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();

    try {
        Query query = new Query("iphone");
        QueryResult result;
        result = Twitter.search(query);
        System.out.println("Total amount of tweets: " + result.getTweets().size());
        List<Status> tweets = result.getTweets();

        for (Status Tweet : tweets) {
            System.out.println("@" + Tweet.getUser().getScreenName() + " : " + Tweet.getText());
        }
    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Failed to search tweets: " + te.getMessage());
    }

そして、これがエラーです。

Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Relevant discussions can be found on the Internet at:
    http://www.google.co.jp/search?q=d35baff5 or
    http://www.google.co.jp/search?q=1446302e
TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
    at Twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.Java:177)
    at Twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.Java:61)
    at Twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.Java:81)
    at Twitter4j.TwitterImpl.get(TwitterImpl.Java:1929)
    at Twitter4j.TwitterImpl.search(TwitterImpl.Java:306)
    at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.Java:38)
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(Unknown Source)
    at Sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    at Sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at Sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    at Sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at Sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    at Sun.security.ssl.Handshaker.processLoop(Unknown Source)
    at Sun.security.ssl.Handshaker.process_record(Unknown Source)
    at Sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at Sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at Sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at Sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    at Sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    at Sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at Java.net.HttpURLConnection.getResponseCode(Unknown Source)
    at Sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
    at Twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.Java:34)
    at Twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.Java:141)
    ... 5 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 Sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at Sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
    at Sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    ... 20 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)
    ... 26 more
Failed to search tweets: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
264
Dozent
  1. あなたのFirefoxブラウザのURLに行き、(URLアドレスの隣の)HTTPS証明書チェーンをクリックしてください。 "more info" > "security" > "show certificate" > "details" > "export.."をクリックしてください。名前をピックアップして、ファイルタイプexample.cerを選択します。キーストア付きのファイルがあり、それをJVMに追加する必要があります。

  2. Cacertsファイルの場所を決めます。 C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

  3. 次に、コマンドラインでexample.cerファイルをcacertsにインポートします。

keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer 

あなたはデフォルトのchangeitであるパスワードを尋ねられるでしょう

JVM/PCを再起動してください。

出典: http://magicmonster.com/kb/prg/Java/ssl/pkix_path_building_failed.html

351
MagGGG

私のJava 6インストールを新しいTwitter証明書で動作させるために証明書ファイルを作成しようとした何時間もの後、私はついにメッセージボードのコメントに埋め込まれた信じられないほど単純な解決策を見つけました。 Java 7インストールからcacertsファイルをコピーして、Java 6インストール内のファイルを上書きするだけです。最初にcacertsファイルのバックアップを作成することをお勧めしますが、それから新しいファイルをコピーしてBOOMしてください。それだけでうまくいきます。

実際にWindowsのcacertsファイルをLinuxのインストールにコピーしたところ、うまくいった。

このファイルは、新旧両方のJava jdkインストールでjre/lib/security/cacertsにあります。

これが他の誰かの悪化の時間を節約することを願っています。

68
Jeremy Goodell

私がこの問題に遭遇したのですが、特に自動証明書は、公式の証明書とは異なり、かなりトリッキーで、Javaはそれほど好きではありません。

次のリンクを確認してください。 Javaの証明書に関する問題を解決します

基本的に、サーバーからの証明書をJava Home証明書に追加する必要があります。 

  1. 証明書を生成または取得し、Servers.xmlで使用するようにTomcatを設定します。
  2. クラスInstallCertのJavaソースコードをダウンロードし、サーバーの実行中に実行します。引数server[:port]を指定します。元のパスワードはJava証明書に対して有効なので( "changeit")、パスワードは必要ありません。
  3. プログラムはサーバーに接続し、Javaは例外を投げます。サーバーが提供する証明書を分析し、プログラムを実行したディレクトリ内にjssecertsファイルを作成できるようにします作業ディレクトリ(Run -> Configurations)。
  4. そのファイルを手動で$Java_HOME/jre/lib/securityにコピーします

これらの手順を実行した後、証明書との接続によってJava内で例外が発生することはなくなります。

次のソースコードは重要であり、それは(Sun)Oracleのブログ、それが提供されたリンク上にあることがわかった唯一のページから消えました、それで私は参考のために答えにそれを添付しています。

/*
 * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/**
 * Originally from:
 * http://blogs.Sun.com/andreas/resource/InstallCert.Java
 * Use:
 * Java InstallCert hostname
 * Example:
 *% Java InstallCert ecc.Fedora.redhat.com
 */

import javax.net.ssl.*;
import Java.io.*;
import Java.security.KeyStore;
import Java.security.MessageDigest;
import Java.security.cert.CertificateException;
import Java.security.cert.X509Certificate;

/**
 * Class used to add the server's certificate to the KeyStore
 * with your trusted certificates.
 */
public class InstallCert {

    public static void main(String[] args) throws Exception {
        String Host;
        int port;
        char[] passphrase;
        if ((args.length == 1) || (args.length == 2)) {
            String[] c = args[0].split(":");
            Host = c[0];
            port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
            String p = (args.length == 1) ? "changeit" : args[1];
            passphrase = p.toCharArray();
        } else {
            System.out.println("Usage: Java InstallCert [:port] [passphrase]");
            return;
        }

        File file = new File("jssecacerts");
        if (file.isFile() == false) {
            char SEP = File.separatorChar;
            File dir = new File(System.getProperty("Java.home") + SEP
                    + "lib" + SEP + "security");
            file = new File(dir, "jssecacerts");
            if (file.isFile() == false) {
                file = new File(dir, "cacerts");
            }
        }
        System.out.println("Loading KeyStore " + file + "...");
        InputStream in = new FileInputStream(file);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();

        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf =
                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();

        System.out.println("Opening connection to " + Host + ":" + port + "...");
        SSLSocket socket = (SSLSocket) factory.createSocket(Host, port);
        socket.setSoTimeout(10000);
        try {
            System.out.println("Starting SSL handshake...");
            socket.startHandshake();
            socket.close();
            System.out.println();
            System.out.println("No errors, certificate is already trusted");
        } catch (SSLException e) {
            System.out.println();
            e.printStackTrace(System.out);
        }

        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("Could not obtain server certificate chain");
            return;
        }

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(System.in));

        System.out.println();
        System.out.println("Server sent " + chain.length + " certificate(s):");
        System.out.println();
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            System.out.println
                    (" " + (i + 1) + " Subject " + cert.getSubjectDN());
            System.out.println("   Issuer  " + cert.getIssuerDN());
            sha1.update(cert.getEncoded());
            System.out.println("   sha1    " + toHexString(sha1.digest()));
            md5.update(cert.getEncoded());
            System.out.println("   md5     " + toHexString(md5.digest()));
            System.out.println();
        }

        System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
        String line = reader.readLine().trim();
        int k;
        try {
            k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
        } catch (NumberFormatException e) {
            System.out.println("KeyStore not changed");
            return;
        }

        X509Certificate cert = chain[k];
        String alias = Host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);

        OutputStream out = new FileOutputStream("jssecacerts");
        ks.store(out, passphrase);
        out.close();

        System.out.println();
        System.out.println(cert);
        System.out.println();
        System.out.println
                ("Added certificate to keystore 'jssecacerts' using alias '"
                        + alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

        private final X509TrustManager tm;
        private X509Certificate[] chain;

        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }

        public X509Certificate[] getAcceptedIssuers() {
            throw new UnsupportedOperationException();
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            throw new UnsupportedOperationException();
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}
23
will824

私のUIアプローチ:

  1. ダウンロード http://www.keystore-Explorer.org/ /
  2. $ Java_HOME/jre/lib/security/cacertsを開きます。
  3. pW:changeitを入力してください(Macではchangemeにできます)
  4. .crtファイルをインポートする

CMDライン:

  1. keytool -importcert -file jetty.crt -alias jetty -keystore $ Java_HOME/jre/lib/security/cacerts
  2. pW:changeitを入力してください(Macではchangemeにできます)
21
Mike Mitterer

私のシステムにJDKとJRE 1.8.0_112の両方が存在していたのですが、状況が少し異なりました。 

既知のコマンドを使用して、新しいCA証明書を[JDK_FOLDER]\jre\lib\security\cacertsにインポートしました。

keytool -import -trustcacerts -keystore cacerts -alias <new_ca_alias> -file <path_to_ca_cert_file>

それでも、私は同じ PKIXパス構築に失敗し続けました error。 

Java -Djavax.net.debug=all ... > debug.logを使用して、デバッグ情報をJava CLIに追加しました。 debug.logファイルでは、 trustStoreで始まる行は次のとおりです。 実際には[JRE_FOLDER]\lib\security\cacertsにあるcacertsストアを指しています。 

私の場合の解決策は、JREで使用されているファイルの上にJDKで使用されているcacertsファイル(新しいCAが追加されている)をコピーすることでした。 

11
M. F.

1.証明書を確認してください

ターゲットURLをブラウザにロードし、サイトの証明書(通常はロック記号の付いたアイコンでアクセスできます。ブラウザのアドレスバーの左側または右側にあります)の有効期限が切れているかどうかにかかわらず、.

2.最新バージョンのJREとJDKをインストールします。

新しいバージョンには通常、更新された信頼できる証明書のセットが付属しています。

また可能であれば、古いバージョンをアンインストールします。これは誤設定エラーを明白にするでしょう。

3.設定を確認します。

  • Java_HOME環境変数が指す場所を確認してください。
  • プログラムの実行に使用しているJavaのバージョンを確認してください。 IntelliJチェックの場合:
    • ファイル - >プロジェクト構造... - >プロジェクト設定 - >プロジェクト - >プロジェクトSDK
    • 「ファイル」 - >「プロジェクト構造」 - >「プラットフォーム設定」 - >「SDK」

4.新しいJavaバージョンからキーストア全体をコピーします。

最新のもの以外のJDKの下で開発している場合 - @ jeremy-goodellが彼の answer で示唆しているように、%Java_HOME%/jre/lib/security/cacertsファイルを最新のインストール済みJREの新しいものと交換します

5.キーストアに証明書を追加します

上記の方法で問題が解決しない場合は、keytoolを使用して証明書をJavaのキーストアに保存してください。

keytool -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_file>

@MagGGGが彼の answer で示唆しているように、証明書付きのファイルはブラウザから取得できます。

注1:あなたはあなたのサイトの証明書へのチェーン内のすべての証明書についてこれを繰り返す必要があるかもしれません。根本から始めなさい。

注意2:<alias_name>はストア内のキーの中で一意である必要があります。そうしないとkeytoolがエラーを表示します。

ストア内のすべての証明書のリストを取得するには、実行します。

keytool -list -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit

問題が発生した場合は、ストアから証明書を削除するのに役立ちます。

keytool -delete -alias <alias_name> -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit
10
Lu55

Smtp.gmail.comの証明書をインポートしたい

解決策は私にとって唯一の解決策です[1]。この証明書を表示するためのコマンドを入力してください

D:\ openssl\bin\openssl.exe s_client -connect smtp.gmail.com:465

  1. 「----- BEGIN CERTIFICATE -----」と「----- END CERTIFICATE -----」の間の行をコピーして、ファイルgmail.cerに保存します。

  2. 実行する

    keytool -import -alias smtp.gmail.com -keystore "%Java_HOME%/ jre/lib/security/cacerts" -file C:\ Users\Admin\Desktop\gmail.cer

  3. パスワードを入力してください chageit

  4. [はい]をクリックして証明書をインポートします 

  5. Javaを再起動します

今コマンドを実行し、あなたが行ってもいいです

6
Sneha Shejwal

問題の背景:  

プロジェクトでNetbeans IDE clean and build optionを使用してmvn clean installを実行しようとすると、次のようなエラーが表示されていました。 IDE /コマンドプロンプトを介して、しかしブラウザを介してファイルをダウンロードすることができます。 

エラー

Caused by: org.Eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.Java.project:product:jar:1.0.32 from/to repo-local (https://url/local-repo): Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

解決策:

1.問題のURLの証明書をダウンロードします。

  • 「管理者として実行」でIEを起動します(そうでない場合は証明書をダウンロードできません)。
  • IE-> にURLを入力してくださいhttps:// url/local-repo (私の場合、このURLには信頼できない証明書がありました enter image description here 。)
  • 証明書エラー - >証明書の表示をクリックして証明書をダウンロードします。
  • 詳細タブを選択 - >ファイルへコピー - >次へ - > "DER encoded binary X.509(.CER)"を選択 
  • 証明書をある場所に保存します。例:c:/user/sheldon/desktop/product.cer 
  • おめでとうございます。サイトの証明書を正常にダウンロードしました

2.キーストアをインストールして問題を解決します。

  • Keytoolコマンドを実行して、ダウンロードしたキーストアを既存の証明書ファイルに追加します。
  • Command:jdk(Java_HOME)のbinフォルダにある以下のコマンド 。 

C:¥Program Files¥Java¥jdk1.8.0_141¥jre¥bin> keytool -importcert -file "C:/user/sheldon/desktop/product.cer" - エイリアス製品-keystore [.____。 "C:/ Program Files/Java/jdk1.8.0_141/jre/lib/security/cacerts"。

  • パスワードを入力するように求められます。キーストアのパスワードを入力します。[この証明書を信頼しますか?[no]:]に[changeit]と入力し、[yes]と入力します。

サンプルコマンドラインコマンド/出力:

keytool -importcert -file "C:/Users/sheldon/Desktop/product.cer" -alias product -keystore "C:/Program iles/Java/jdk1.8.0_141/jre/lib/security/cacerts"
Enter keystore password:
Trust this certificate? [no]:  yes
Certificate was added to keystore
  • おめでとうございます。 Netbeans IDEで、「PKIXパスの構築に失敗しました:Sun.security.provider.certpath.SunCertPathBuilderException」のエラーが発生しなくなりました。 
4
Barani r

これはTwitter固有の回答ではありませんが、このエラーを検索するときに出てくる質問です。 Webブラウザーで表示したときに有効な証明書があるように見えるWebサイトに接続するときにシステムがこのエラーを受け取っている場合、おそらくそのウェブサイトには不完全な証明書チェーンがあります

問題の簡単な要約:認証局は、ルート証明書を使用して古い証明書だけに署名することはありません。代わりに、(通常)認証局フラグも設定されている(つまり、証明書への署名が許可されている) intermediate 証明書に署名します。次に、CAから証明書を購入すると、これらの中間証明書のいずれかでCSRに署名します。

Javaトラストストアには、ルート証明書のみがあり、中間証明書はありません。

誤って設定されたサイトは、署名済み証明書 just を返す場合があります。問題:トラストストアにない中間証明書で署名されました。ブラウザは、キャッシュされた中間証明書をダウンロードまたは使用することでこの問題を処理します。これにより、Webサイトの互換性が最大化されます。ただし、JavaおよびOpenSSLなどのツールはサポートしません。そして、それは問題のエラーを引き起こします。

Qualys SSL Test を使用して、この疑いを確認できます。あなたがサイトに対してそれを実行し、それが言うなら

このサーバーの証明書チェーンは不完全です。

それはそれを確認します。認定パスを見て、 Extra Download というテキストを見ると、これを確認することもできます。

修正方法:サーバー管理者は、中間証明書も返すようにWebサーバーを構成する必要があります。たとえば、Comodoの場合は、.ca-bundleファイルが便利です。たとえば、mod_sslを使用したApache構成では、SSLCertificateChainFile構成設定を使用します。 nginxの場合、中間証明書と署名済み証明書を連結し、SSL証明書構成で使用する必要があります。詳細については、「不完全な証明書チェーン」をオンラインで検索してください。

4
Reid
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

証明書の検証をジャンプするために使用されます。

2
gorums

その理由は、上記のエラーは、JDKが多くの信頼できる認証局(CA)証明書と一緒に「cacerts」というファイルにまとめられていることですが、このファイルには自己署名証明書の手がかりがありません。つまり、cacertsファイルには自己署名証明書がインポートされていないため、信頼できるエンティティとして扱われていないため、上記のエラーが発生します。

上記のエラーを修正する方法

上記のエラーを修正するには、自己署名証明書をcacertsファイルにインポートするだけです。

まず、cacertsファイルを見つけます。 JDKの場所を見つける必要があります。 EclipseやIntelliJ IdeaなどのIDEを使用してアプリケーションを実行している場合は、プロジェクト設定に移動してJDKの場所を確認してください。たとえばMac OSの場合、cacertsファイルの一般的な場所はこの場所です。 /ライブラリ/ Java/JavaVirtualMachines/{{JDK_version}} /目次/ホーム/ jre/lib/security Windowsのマシンでは{{Installation_directory}}/{{JDK_version}}/jre/libにあります。 /セキュリティ

Cacertsファイルを見つけたら、次に自己署名証明書をこのcacertsファイルにインポートする必要があります。自己署名証明書を正しく生成する方法がわからない場合は、最後の記事を確認してください。

証明書ファイル(.crt)がなく、単に.jksファイルがある場合は、以下のコマンドを使用して.crtファイルを生成できます。すでに.crt/.pemファイルがある場合は、以下のコマンドを無視できます。

##キーストア(.jksファイル)から証明書を生成するには####

keytool -export -keystore keystore.jks -alias selfsigned -file selfsigned.crt

上記の手順でselfsigned.crtというファイルが生成されます。証明書をcacertsにインポートします。

keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}

例えば

keytool -importcert -file selfsigned.nextgen.crt -alias selfsigned.nextgen -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts

それだけで、アプリケーションを再起動すればうまくいきます。それでもうまくいかず、SSLハンドシェイク例外が発生する場合。おそらく証明書に登録されている別のドメインを使用しているということです。

Link 詳細な説明とステップバイステップの解決策はここにあります。

2
Abhishek Galoda

私は彼らのアップデートサイトを介してEclipseにCucumber-Eclipseプラグインをインストールしようとしているときにこの質問に出会いました。同じSunCertPathBuilderExceptionエラーが発生しました。

Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
    Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
    Sun.security.validator.ValidatorException: PKIX path building failed: 
   Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

他の答えのいくつかはこの質問の与えられた状況にふさわしく、役立つものですが、それでも私の問題には役に立たず誤解を招くものでした。 

私の場合、問題は、アップデートサイトに提供されているURLが次のとおりであることです。

https://cucumber.io/cucumber-Eclipse/update-site

しかし、ブラウザ経由でナビゲートすると、(追加された " .github "に注意してください):

http://cucumber.github.io/cucumber-Eclipse/update-site/

そのため、Eclipseで更新サイトを追加するときに、リダイレクトされたバージョンの更新サイトURLを使用することが解決策となります。

2
royfripple

cacertsを追加してもうまくいきませんでした。フラグ-Djavax.net.debug=allを指定してlogを有効にした後、jssecacertsからJavaの読み取りを知るようになりました。

jssecacertsへのインポートはついにうまくいきました。

2
alk453

私の場合は、証明書エラーが発生しました。これは、フィドラーをバックグラウンドで実行していたために証明書がめちゃくちゃになったためです。プロキシとして機能しますので、それを閉じてEclipseを再起動してください。

0
Atihska

あなたがatlassianソフトウェアexで上記のエラーを持っているとき。ジラ

2018-08-18 11:35:00,312 Caesium-1-4 WARN anonymous    Default Mail Handler [c.a.mail.incoming.mailfetcherservice] Default Mail Handler[10001]: javax.mail.MessagingException: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while connecting to Host 'imap.xyz.pl' as user '[email protected]' via protocol 'imaps, 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

信頼できるキーストアに証明書を追加できます(missing_caを適切な証明書名に変更します)。

keytool -importcert -file missing_ca.crt -alias missing_ca -keystore /opt/atlassian/jira/jre/lib/security/cacerts

パスワードを要求されたらchangeitを入力し、yを確認します

その後、単にjiraを再起動してください。

0
Karol Murawski

これは解決策ですが、この問題に関する私の話の形です:

上記のすべての解決策を試みて(3日間)死にかけていましたが、何もうまくいきませんでした。

私はすべての希望を失いました。

私がプロキシの背後にいて、彼らが最近セキュリティポリシーを更新したと彼らが言ったので、これに関して私のセキュリティチームに連絡しました。

開発者に通知しないことで、彼らをひどくscった。

その後、すべての証明書を含む新しい「cacerts」ファイルを発行しました。

%Java_HOME%/ jre/lib/security内にあるcacertsファイルを削除し、問題を解決しました。

したがって、この問題に直面している場合は、ネットワークチームからも同様のことが考えられます。

0
Vikash Kumar

それは答えに追加です https://stackoverflow.com/a/36427118/1491414 ありがとう@MagGGG

  • 管理者権限があることを確認してください
  • キーストアのパスには二重引用符を使用してください(-keystore C:¥Program Files(x86)¥Java¥jre1.6.0_22¥lib¥security¥cacerts ")。WindowsOSでは、デフォルトのインストール場所はProgram Filesになります。プログラムファイル間のスペースによるエラー。 
0

Java cacertsをコピーしてみてください:

cp /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.172-9.b11.fc28.x86_64/jre/lib/security/cacerts $Java_HOME/jre/lib/security/cacerts

以下の方法で修正しました /

  1. 関連号があるコピーURL
  2. Android Studio - >設定 - > HTTP設定に行きます。
  3. [接続テスト]で、そのURLを貼り付けて[OK]を押します。
  4. Okをクリックすると、Android Studioはその URLの証明書のインポートを求めます
  5. それでおしまい。他に何もすることはなく、私の問題は解決しました。 studioを再起動する必要もありません。
0
AndroDev

CloudFoundryを使用していて証明書の問題が発生した場合は、証明書が含まれているkeystore-serviceを使用してjarファイルをもう一度プッシュする必要があります。単にバインドを解除し、バインドして再起動するだけでは機能しません。

0
Smart Coder

リポジトリURLがHTTPでも動作し、セキュリティが問題にならない場合は、settings.xml(いつもではありませんが、%USERPROFILE%/.m2にあります)および<repository>の場合はHTTPSをHTTPに移動) <pluginRepository>のURL.

たとえば、

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>

これに置き換える必要があります。

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>
0

Arg -Djavax.net.ssl.trustStore=を渡すことで、JREの代わりに自分のトラストストアを使用していました。

トラストストアの証明書に関係なく、このエラーが発生しました。私にとっての問題は、arg行に渡されたプロパティの順序です。 私が-Djavax.net.ssl.trustStore=-Djavax.net.ssl.trustStorePassword= before -Dspring.config.location=-jar argsを入力すると、httpsを介して残りの通話を正常に呼び出せました。 

0
jasonoriordan

私はubuntu 15.10で同じ問題を抱えています。ローカルでプラグインをダウンロードしてみてください。 https://github.com/lmenezes/elasticsearch-kopf/archive/master.Zip そして次のコマンドでインストールしてください。

Sudo /usr/share/elasticsearch/bin/plugin install file:/home/dev/Downloads/elasticsearch-kopf-master.Zip

環境によってパスが異なる場合があります。 

よろしく。 

0
user1379218

ここでは通常、この種の例外は信頼できる証明書のPATHに不一致がある場合に発生します。セキュリティ保護された通信にこのサーバー証明書が必要な構成またはパスを確認してください。 

0
ketan

Javaアプリケーションが別のアプリケーション/サイトと通信しようとしているときにLinuxコンテナでこの問題が発生する場合、証明書がロードバランサーに誤ってインポートされているためです。証明書をインポートするために従うべき一連の手順があり、正しく実行されない場合、次のような問題が表示されます。

Caused by: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
certification path to requested target

証明書が正しくインポートされたら、実行する必要があります。 JDK証明書をいじる必要はありません。

0
vsingh

私は同じ問題に直面していて、以下の簡単なステップを使用してそれを解決します:

1)GoogleからInstallCert.Javaをダウンロードします。

2) javac InstallCert.Java を使用してコンパイルします。

3) Java InstallCert.Java を使用し、ホスト名とhttpsポートを指定してInstallCert.Javaを実行し、入力を求められたら「1」を押します。信頼されたキーストアとして「localhost」を追加し、以下のように「jssecacerts」という名前のファイルを生成します。

Java InstallCertローカルホスト:443

4)jssecacertsを$ Java_HOME/jre/lib/securityフォルダにコピーします。

ここで問題を解決するための主な情報源は以下のとおりです。

https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html

0
Ankur jain