javax.net.ssl.SSLPeerUnverifiedException: сертификат дляне соответствует ни одному из альтернативных имен субъекта: [* .app.domain]] - PullRequest
0 голосов
/ 06 ноября 2019

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

Итак, для обеих служб я настроил склад доверенных сертификатов с частным центром сертификации и отдельным хранилищем ключей с сертификатом, который он идентифицирует как. Переход к простому / привет маршруту в браузере показывает, что соединение является безопасным (т.е. издатель известен, а общее имя допустимо). Это то же самое, когда я curl -iv https://{address}, он говорит, что рукопожатие прошло, сказав, что «SSL сертификат проверен нормально» и что домен соответствует имени подстановочного знака в сертификате.

Однако, когда я пытаюсь выполнить простой запрос GET из отдельного сервиса, который настроен точно так же, я получаю сообщение об ошибке, указанное в заголовке. Проблема в том, что он говорит, что сертификат для службы, с которой я пытаюсь связаться, не может сопоставить ни одно из альтернативных имен субъекта в его сертификате с доменом, на котором он зарегистрирован. Но это абсолютно неверно, единственное отличие состоит в том, что он использует подстановочный знак. Это работает из браузера И команды curl, которая отлаживает рукопожатие. Это просто не из моего загрузочного кода Java / Spring на отдельном микросервисе.

Работает ли Java по-разному в более строгой форме, что означает, что она не любит связываться с серверами с подстановочными сертификатами?

РЕДАКТИРОВАТЬ: добавление строки, показанной ниже, исправляет это, поэтому происходит сбой при проверке имени хостав Java (но не в браузере или отладке с помощью curl). Это небезопасно, так что это НЕ РЕШЕНИЕ.

SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(truststore, null).build();
HostnameVerifier hostnameVerifier = new NoopHostnameVerifier(); // I added this line, but it's advised against as it's insecure
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);

РЕДАКТИРОВАТЬ 2: Classic StackOverflow, принижая меня за обращение за помощью. Я собирался оставить это, потому что это может помочь другим, но думаю, что я не могу сейчас.

1 Ответ

0 голосов
/ 06 ноября 2019

Так что мне удалось это исправить, добавив мой собственный метод HostnameVerification. Я использовал это в качестве примера https://raw.githubusercontent.com/masover/wildcard-hostname-verifier/master/src/net/forkbox/weblogic/WildcardHostnameVerifier.java

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