"PKIX path building failed" и "unable to find valid certification path to requested target"

Я пытаюсь получить твиты, используя библиотеку twitter4j для своего java проекта. При первом запуске я получил ошибку о сертификате 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"

Но безуспешно. Вот процедура получения твиттеров:

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
Комментарии к вопросу (4)
Решение
  1. Перейти к URL-адрес в браузере Firefox, нажмите на цепочку сертификата https (рядом с URL-адрес). Нажмите и"Подробнее" и > на "безопасности" и > "и показать сертификат" и > на "детали" и > "на экспорт.."` в. Самовывоз название и выбрать тип файла пример.ЦЭИ. Теперь у вас есть файл ключей, и вы должны добавить это к вашей JVM

  2. Определить местоположение cacerts в файлы, например. Файлы C:\Program (х86)\Ява\jre1.6.0_22\Либ\безопасность\cacerts в. `

  3. Следующий импортировать `пример.файл CER в cacerts в в командной строке:

инструмент -импорт -псевдоним пример-хранилище файлов C:\Program (х86)\Ява\jre1.6.0_22\Либ\\cacerts в файл безопасности пример.КВЖД

Вам будет предложено ввести пароль, который по умолчанию изменяется

Перезагрузка виртуальной машины Java/ПК.

источник: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

Комментарии (24)

После многих часов попыток создать файлы сертификатов, чтобы заставить мою установку Java 6 работать с новыми сертификатами twitter, я, наконец, наткнулся на невероятно простое решение, спрятанное в комментарии на одной из досок объявлений. Просто скопируйте файл cacerts из установки Java 7 и перезапишите тот, что находится в установке Java 6. Возможно, лучше сначала сделать резервную копию файла cacerts, но затем просто скопировать новый файл и БУМ! он просто работает.

Обратите внимание, что я скопировал файл cacerts из Windows на установку Linux, и он отлично работает.

Файл находится в jre/lib/security/cacerts как в старой, так и в новой установке Java jdk.

Надеюсь, это сэкономит кому-то еще несколько часов нервотрепки.

Комментарии (5)

Мой подход пользовательского интерфейса:

  1. Скачать http://www.keystore-explorer.org/
  2. Открытое $переменной JAVA_HOME/JRE и/lib/безопасности/cacerts в
  3. введите ПВ: изменяется (может быть changeme на Mac)
  4. Импорт .файл CRT

УМК-линия:

  1. ключей -importcert -файл пристани.ЭЛТ -псевдоним причал -хранилище $переменной JAVA_HOME/JRE и/lib/безопасности/cacerts в
  2. введите ПВ: изменяется (может быть changeme на Mac)
Комментарии (3)

Я наткнулся на эту проблему, на решение которой ушло много часов исследований, особенно с автогенерируемыми сертификатами, которые, в отличие от официальных, довольно хитрые и Java их не очень любит.

Пожалуйста, проверьте следующую ссылку: Решение проблемы с сертификатами в Java

В основном вам нужно добавить сертификат с сервера в Java Home certs.

  1. Сгенерируйте или получите свой сертификат и настройте Tomcat на его использование в Servers.xml
  2. Скачайте исходный код Java класса InstallCert и выполните его во время работы сервера, указав следующие аргументы server[:port]. Пароль не нужен, так как для Java-сертификатов работает оригинальный пароль ("changeit").
  3. Программа подключится к серверу, Java выдаст исключение, проанализирует сертификат, предоставленный сервером, и позволит вам создать файл jssecerts в директории, где вы выполнили программу (если программа выполняется из Eclipse, убедитесь, что вы настроили рабочую директорию в 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);
        }
    }
}
Комментарии (1)
  1. Проверить сертификат

Пытаюсь загрузить URL-адрес в браузере и просмотр сайта'сертификат s (обычно это'С можно иконка со знаком замка. Это's на левой или правой стороне браузера's в адресную строку) если это'с истекшим сроком или ненадежных по другой причине.

  1. Установите последние версии JRE и JDK

    Новые версии, как правило, приходят с обновленным набором доверенных сертификатов.

Также, если это's возможно, удалить старые версии. Это сделает ошибки неправильной явные.

  1. Проверьте ваши настройки:

  • Проверьте, где ваша переменной JAVA_HOME переменная окружения указывает.
  • Проверить, какая версия Java будет использоваться для запуска программы. В IntelliJ:
  • Файл -> структура проекта... - и gt; Настройки -&ГТ проект; проект -> проект СДК:
  • Файл -> проекта структуры... - и gt; Настройки -&платформа gt; пакет SDK
  1. Скопировать весь ключей от новой версии Java

Если вы разрабатываете под JDK кроме последнего доступны - попробуйте заменить `%переменной JAVA_HOME%/JRE и/lib/безопасности/cacerts в файл с новым один из последних установленный JRE (сделать резервную копию сначала) как @Джереми-Гуделл говорит в его ответ

  1. Добавить сертификат(ы) на ваш keystore

Если ничего выше решает ключей использовать проблему, чтобы сохранить сертификат(ы) на Java'ы ключей:

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

Файл с сертификатом можно получить из браузера, как @MagGGG предлагает в своем ответить.

Примечание 1: Возможно, вам придется повторить это для каждого сертификата в цепочке вашего сайта'ы сертификат. Начните от корня одного.

Примечание 2: в <псевдоним> должно быть уникальным среди ключей ключей в магазине или будет показывать ошибку.

Чтобы получить список всех сертификатов в хранилище вы можете запустить:

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

В случае если что-то пойдет не так, это поможет вам удалить сертификат из хранилища:

keytool -delete -alias  -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit
Комментарии (0)

У меня была немного другая ситуация, когда оба JDK и JRE 1.8.0_112 присутствовали на моей системе.

Я импортировал новых сертификатов ca в [JDK_FOLDER]\среда jre\lib в\безопасность\cacerts в используя уже известные команды:

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

Все равно, я продолжал получать те же инфраструктура pkix путь здании не удалось ошибка.

Я добавил отладочную информацию на Java командной строки, с помощью Ява -Djavax.чистая.отладки=все ... и GT; отладка.журнал. В debug.лог-файл, строку, которая начинается с *хранилище:* фактически указал на хранилище cacerts найден в[JRE_FOLDER]\Либ\безопасность\cacerts в.

В моем случае решение было скопировать файл cacerts файл, используемая JDK (который новый КАС добавил) над той, что используется JRE и что исправили проблему.

Комментарии (1)

Предыстория:

Я получаю следующую ошибку, когда я пытаюсь запустить чистый МВН установить в мой проект и через среда NetBeans "очистить и построить" вариант. Эта проблема из-за сертификата не доступны, когда мы скачать через чистых зерен язь/через командную строку, но с возможностью загрузки файлов через браузер.

Ошибка:

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-адрес в вопрос:

  • Запуск т. е. на "Запуск от имени администратора" и (в противном случае мы не сможем скачать сертификат)
  • Введите URL в IE-и GT; https://url/local-repo (В моем случае этот URL-адрес был ненадежный сертификат.)
  • Скачать сертификат, нажав на ошибке -&ГТ сертификат; сертификат
  • Выберите вкладку "Сведения" - и GT; копировать в Файл -> В следующий -и GT; выберите "в Der-кодировке X. 509 (.ЦЭИ)
  • сохраните сертификат в некоторые места, например : c:/user/sheldon/desktop/product.cer
  • Поздравляю! вы успешно скачали сертификат для сайта

2. Теперь установить ключ магазин, чтобы исправить проблему.

  • Выполнить команду keytool, чтобы добавить загруженный ключей в существующий файл сертификата.
  • Команды: следующую команду в папке bin для JDK (переменной JAVA_HOME).

C:\Program файлы\папку Java\jdk1.8.0_141\среда JRE\bin и>ключей -importcert -файл "и C:/user/sheldon/desktop/product.cer" -псевдоним продукта -хранилище "и C:/Program файлы/Ява/jdk1.8.0_141/среда jre/lib/безопасности/cacerts в себе".

  • Вам будет предложено ввести пароль. Введите пароль хранилища ключей: введите "не изменяется" снова и"Доверие этому сертификату? [нет]:" и введите "Да"и

Пример командной строки команды/выход:

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
  • Contgrats! теперь вы избавились от "в здании инфраструктура pkix путь не удалось: солнце.безопасности.поставщика.certpath.SunCertPathBuilderException" и ошибка в среде NetBeans.
Комментарии (4)
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

Он используется для прыжка проверка сертификата.

Комментарии (11)

Я хотел, чтобы импортировать сертификат smtp.gmail.com

Только решение работало для меня

  1. Введите команду, чтобы просмотреть этот сертификат

    D:\openssl\bin\openssl.exe s_client -подключения по протоколу SMTP.в Gmail.ком:465

  2. Скопировать и сохранить грань между " по - -----начните сертификата-----" и "-----конец сертификат-----" и в файл в Gmail.КВЖД

  3. Запустить

    ключей -импорт -псевдоним smtp.gmail.com -хранилище " в%переменной JAVA_HOME%/JRE и/lib/безопасности/cacerts в том, что" -файл C:\Users\Admin\Desktop\gmail.cer

  4. Введите пароль chageit

  5. Нажмите кнопку Да, чтобы импортировать сертификат

  6. Перезапуск Явы

теперь выполните команду и вы хорошо идти

Комментарии (2)

Причина, мы вам выше ошибка заключается в том, что JDK является в комплекте с большим количеством доверенного центра сертификации(ca) сертификаты в файл под названием ‘cacerts В’, но этот файл не имеет никакого понятия о наших самоподписанный сертификат. Иными словами, cacerts файл не наш самоподписанный сертификат и, следовательно, не рассматривать его в качестве доверенного лица, и, следовательно, он дает выше сообщение об ошибке.

Как исправить вышеуказанные ошибки

Чтобы исправить вышеперечисленные ошибки, все, что нам нужно-это импортировать самозаверяющий сертификат в файл cacerts.

Во-первых, найдите файл cacerts. Мы должны выяснить расположения пакета JDK. При запуске приложения через один из как в IDE Eclipse или IntelliJ идея перейти к настройкам проекта и выяснить, что положение с JDK. Для Эл.г на Mac типичное расположение операционной системы в cacerts файл будет в этом месте /библиотека/для Java/JavaVirtualMachines/ {{JDK_version}}/содержание/домой/в jre/lib/безопасности на машину окна было бы под {{Installation_directory}}/{{JDK_version}}/среда jre/lib/безопасности

Как только вы обнаружили файл cacerts, теперь нам нужно импортировать самозаверяющий сертификат, чтобы этот файл cacerts. Проверьте последние статьи, если вы не знаете как создать самоподписанный сертификат правильно.

Если вы не имеете файл сертификата(.ЭЛТ) и просто .JKS файл можно создать .файл CRT с помощью ниже команду. В случае, если у вас уже есть .ЭЛТ/.затем файл PEM можно пропустить следующую команду

Для создания сертификата из хранилища ключей(.файл JKS)

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

Выше шаг будет генерировать файл под названием Как.ЭЛТ.Теперь импортируйте сертификат в cacerts в

Теперь необходимо добавить сертификат в jre/lib/безопасности/cacerts в (trustore)

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-подтверждения. Это, вероятно, означает, что вы используете другой домен регистрируется в сертификате.

Связь с подробным объяснением и пошаговыми резолюции здесь.

Комментарии (0)

Это'т Твиттер-конкретный ответ, но это вопрос, который встает при поиске этой ошибки. Если ваша система получает эту ошибку при подключении к веб-сайту, что кажется, иметь действительный сертификат при просмотре в веб-браузере, что, вероятно, означает , что сайт имеет неполную цепочку сертификатов.

Краткое резюме проблемы: сертификации Дон'т использовать их корневой сертификат, чтобы подписать только любой старый сертификат. Вместо этого, они (обычно) подписывать сертификаты intermediate, которые имеют сертификации флаг (то есть разрешено подписывать сертификаты). Тогда при покупке сертификата от центра сертификации, они подпишут ваш запрос с одного из этих промежуточных сертификатов.

Ваше доверие-магазине на Java, скорее всего, имеет только корневой сертификат, а не промежуточные.

Неправильно настроенный сайт может вернуть just их самоподписанный сертификат. Проблема: он был подписан промежуточный сертификат, что's не в ваше доверие магазин. Браузеры будут обрабатывать эту проблему путем загрузки или с помощью кэширования промежуточных сертификатом; это позволяет обеспечить максимальную совместимость веб-сайт. Java и инструменты, например, OpenSSL, однако, выиграл'т. И это вызывает ошибку в вопросе.

Вы можете проверить это подозрение с помощью тест оформлен протокол SSL. Если вы запустите это на сайте и написано

этот сервер'цепочки сертификатов S является неполным.

то что это подтверждает. Вы также можете увидеть, посмотрев по пути сертификации и видя текста Extra Download.

Как исправить: администратор сервера должен настроить веб-сервер, а также вернуть промежуточных сертификатов. Для Comodo, например, отсюда.файл ca-пакет приходит в сподручное. Например, в конфигурации Apache с mod_ssl, вы'd с помощью SSLCertificateChainFile параметр конфигурации. Для nginx, нужно объединить промежуточных сертификатов и сертификатов и использовать в конфигурации SSL сертификата. Вы можете узнать больше, поиск на "неполная цепочка сертификатов" в онлайн.

Комментарии (0)

Добавление cacerts в не работает для меня. После включения войти с флагом -Djavax.чистая.отладки=все, потом пришел знаете Java чтение изjssecacerts`.

Импорт в jssecacerts работал наконец.

Комментарии (1)

Я наткнулся на этот вопрос при попытке установить свежий огурец-затмение плагин в 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

В то время как некоторые другие ответы будут уместны и полезны на этот вопрос's в данной ситуации, они были тем не менее бесполезен и вводит в заблуждение мой вопрос.

В моем случае, проблема была в том, что URL-адрес, указанный на их сайте обновление:

Однако при переходе к нему через браузер, он перенаправляется на (примечание добавил, что ".на GitHubи"):

Поэтому резолюция, чтобы просто использовать перенаправленные версия обновления URL сайта, при добавлении сайта обновление в Eclipse.

Комментарии (5)

Передо мной стоял тот же вопрос, и он решен с помощью приведенных ниже простых шагов:

  1. Скачать InstallCert.java из Google

  2. скомпилировать его с помощью и javac InstallCert.java

  3. запустить InstallCert.java используя Ява InstallCert.java, с hostname и порт HTTPS, и нажимаем “1”, когда задаете вопрос. Он будет добавить “localhost” в качестве надежного хранилища, и создает файл с именем “jssecacerts“, как показано ниже:

Ява InstallCert адресу localhost:443

  1. скопировать jssecacerts в $переменной JAVA_HOME/JRE и/lib/безопасности папки

Основным источником для решения этой проблемы является:

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

Комментарии (0)

Это решение, но в виде моей истории с этой проблемой:

Я был почти мертв, пытаясь все приведенное выше решение(за 3 дня ) и ничего не работало для меня.

Я потерял всякую надежду.

Я связался с моей командой безопасности в связи с этим, потому что я за прокси, и они сказали, что они недавно обновили свои политики безопасности.

Я сильно отругала их за не информирование разработчиков.

Позже они выпустили новый "в cacerts в том, что" файл, содержащий все сертификаты.

Я снял cacerts файл, который присутствует в %переменной JAVA_HOME%/JRE и/lib/безопасности и решить мою проблему.

Так что если вы столкнулись с этой проблемой, это может быть от сети команда также, как это.

Комментарии (0)

Обычно такое исключение возникает при несоответствии в PATH доверенного сертификата. Проверьте конфигурацию или путь, где этот сертификат сервера требуется для безопасной связи.

Комментарии (3)

Для меня, ошибка сертификата выскочил, потому что я скрипач работает в фоновом режиме и что съедут с сертификатом. Он работает как прокси-так близко, что и перезапустите Eclipse.

Комментарии (1)

Это'дополнение к ответу https://stackoverflow.com/a/36427118/1491414. Спасибо @MagGGG

  • Пожалуйста, убедитесь, что у вас есть разрешение администратора
  • Пожалуйста, используйте двойные кавычки путь к хранилищу ключей (-keystore файлы C:\Program (х86)\Ява\jre1.6.0_22\Либ\безопасность\cacerts в том, что"), потому что в ОС Windows по умолчанию устанавливает местоположение будет файлов программы, и вы получите сообщение об ошибке из-за пространства между файлами программы.
Комментарии (0)

Я исправил это с помощью ниже метод-

  1. Скопировать URL-адрес, который имеет подключение вопросу
  2. Перейдите в Android студии-и gt;Настройки->параметры http
  3. В 'тестовое подключение', вставьте этот URL-адрес и нажмите OK
  4. На ОК нажать, Android студия будет просить, чтобы импортировать сертификат, что URL-адрес, импортировать его
  5. Что's оно. Ничего не могу сделать, и моя проблема исчезла. Не нужно перезапуск студии.
Комментарии (0)

Когда у вас есть ошибки с программным обеспечением компании Atlassian экс. Джира

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 'jira@xyz.pl' 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

Если просит пароль ставим изменяется и подтвердить г

После этого просто перезагрузите Джира.

Комментарии (0)