Внезапная ошибка: ValidatorException: сбой построения пути PKIX - PullRequest
0 голосов
/ 02 ноября 2018

My Spring Boot Application использует REST для подключения к различным внешним URL-адресам, все имеют один домен. Я получил для этого URL сертификаты и разные учетные данные.

Уже 2 дня соединения больше не работают, так как я получаю сообщение об ошибке «Ошибка построения пути PKIX ValidatorException» (ниже приведена трассировка стека исключения).

Прежде чем я создал для каждого URL-адреса определенный шаблон REST, в котором я настроил SSLContext вместе с конкретными данными хранилища ключей и учетными данными клиента.

Мне удалось исправить ошибку, если я добавил в свой SSLContext следующие хранилища доверия (я получил файл CA):

        // Create Trust Managers
        CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
        Certificate ca = certificateFactory.generateCertificate(caInput);
        String alias = ((X509Certificate) ca).getSubjectX500Principal().getName();
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null);
        trustStore.setCertificateEntry(alias, ca);
        TrustManager[] trustManagers = {new CustomTrustManager(trustStore)};

Не могли бы вы дать мне подсказку:

  1. Как я могу использовать один и тот же TrustStore для всех моих подключений? Даже если у меня один и тот же домен, я получил для этих URL-адресов, разные сертификаты и мне нужны разные учетные данные клиента для подключения - поэтому для каждого объекта RestTemplate я настраиваю разные SSLContext). Я также вызываю URL-адреса параллельно (используя JMS Queues), поэтому мне было интересно, если у меня не может быть проблем с доступом к одному и тому же файлу CA одновременно ...
  2. Как вы можете объяснить, почему вдруг эти URL перестают работать? Мы не изменили нашу версию Java, локально или в облаке ... Я немного новичок в части авторизации и не могу понять, как она работала раньше, и внезапно остановилась.

Спасибо!

  org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://....": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; 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 org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:696)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:644)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:296)

1 Ответ

0 голосов
/ 02 ноября 2018

Обычно эта ошибка означает, что сервер, с которым вы пытаетесь установить связь, использует сертификат, в котором (1) у вас нет сертификата, подключенного к вашему клиенту, и (2) у вас нет промежуточного сертификата, используемого для создайте сертификат на стороне сервера, связанный с вашим клиентом. Обычно вы видите эту ошибку, когда сертификат является либо самоподписанным, либо подписанным центром сертификации, не входящим в стандартное хранилище ключей Java.

Чтобы убедиться, что все вызовы от вашего клиента имеют, вы должны добавить сертификат в хранилище ключей, используемое вашим приложением. Это может быть либо стандартное хранилище ключей Java, либо хранилище ключей конкретного приложения, которое подключено к вашей JVM с использованием параметров запуска -Djavax.net.ssl.trustStore=<path to keystore> и -Djavax.net.ssl.trustStorePassword=<password>.

Эта ошибка может внезапно появиться, если сервер изменил свой сертификат, на что-то, о чем ваш клиент не знает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...