Сбой взаимной аутентификации Spring Boot при рукопожатии

У меня есть клиент RestTemplate, встроенный в приложение SpringBoot, как показано ниже,

@SpringBootApplication
public class SecureAppClientApplication {

    private static final Logger LOG = LoggerFactory.getLogger(SecureAppClientApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(SecureAppClientApplication.class, args);
        LOG.debug("Testing connecting to secure site");
        HttpsURLConnection.setDefaultHostnameVerifier ((hostname, session) -> false);
        RestTemplate restTemp = new RestTemplate();
        String greetings = restTemp.getForObject("https://my.secure.service", String.class);
        LOG.debug("Received greetings from secured server ---> " + greetings );
    }
}

application.proerties, для которого читается что-то вроде,

server.ssl.key-store=myKeyStore.jks
server.ssl.key-store-password=Store@123
server.ssl.key-alias=myClient
server.ssl.key-password=Key@1234
server.ssl.trust-store=cacerts
server.ssl.trust-store-password=changeit

Есть и другие свойства, но не связанные с HTTPS (например, ведение журнала, JPA и т. д.).

Теперь, с сертификатом хоста, экспортированным из браузера (Mozilla), я установил его в

  • myKeyStore.jks присутствует в пути к классам,
  • копия cacerts присутствует в пути к классам,
  • cacerts в доме JDK и
  • cacerts в доме JRE

Тем не менее я получаю ошибку проверки PKIX, корнем которой является

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Не знаю, с чего начать поиск неисправностей. Это

  • Сертификат извлечен из браузера, поскольку ранее я тестировал сертификаты X509, созданные openssl.
  • Корневой путь к серверу; Я пытаюсь получить доступ к «https: // хост / служба», тогда как сертификат показывает информацию только для «https: // хост»
  • Импорт с помощью keytool -importcert -file certificate.cer -keystore keystore.jks -alias my-alias

ОБНОВИТЬ Похоже, проблема с сертификатом. Оказывается, получение сертификата из браузера не особо помогает. Я связался с администратором хоста сервера и получил 3 сертификата для установки. Глупо полагаться на сертификат браузера. Наверное, есть что-то вроде certificate chaining.

ЗАКЛЮЧЕНИЕ Убедитесь, что вы получили соответствующие сертификаты в реальном случае, потому что мир просто не полагается на простые сертификаты, доступные в браузерах, особенно для вызовов веб-сервисов.

Похоже, вам нужно настроить доверие, но вместо этого вы добавляете ключи сайта в свое хранилище ключей, если я не понимаю что-то из вашего примера. Вы пытались использовать keytool для добавления сертификата сайтов в ваше хранилище доверенных сертификатов?

Jacob Blanton 16.05.2018 14:01

Я считаю, что файл cacerts, поставляемый с установкой Java, служит trust-store. Я уже упоминал, где установлен весь сертификат. Мне нужно что-то еще добавить?

soufrk 16.05.2018 14:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
710
1

Ответы 1

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

Другие вопросы по теме