почему Java не отправляет клиентский сертификат во время квитирования SSL?

Я пытаюсь соединиться с безопасным веб-сервисом.

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

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

Конкретно:

  1. Сервер запросил, чтобы клиентский сертификат (CN=RootCA) - т.е. "дал мне сертификат, который подписывается полностью CA"
  2. Java изучил keystore и только нашел мой клиентский сертификат, который подписывается "SubCA", который в свою очередь выпущен "RootCA". Это не потрудилось изучать базу доверенных сертификатов... понятное дело хорошо я предполагаю
  3. Печально, когда я пытался добавить сертификат "SubCA" keystore, который не помог вообще. Я действительно проверял, загружаются ли сертификаты в keystore. Они делают, но KeyManager игнорирует все сертификаты кроме клиента один.
  4. Все вышеупомянутое приводит к тому, что Java решает, что это не имеет никаких сертификатов, которые удовлетворяют запрос сервера, и отправляет, ничто... tadaaa не квитирует отказ :-(

Мои вопросы:

  1. Действительно ли возможно, что я добавил сертификат "SubCA" keystore способом, который "повредил цепочку сертификата" или что-то так, чтобы KeyManager только загрузил клиентский сертификат и проигнорировал остальных? (Chrome и openssl удается понять это итак, почему не может Java? - отмечают, что сертификат "SubCA" всегда представляется отдельно как доверяемые полномочия, таким образом, Chrome, по-видимому, правильно упаковывает его наряду с клиентским сертификатом во время квитирования),
  2. Действительно ли это - формальная "проблема конфигурации" о стороне сервера? Сервер является третьим лицом. Я ожидал бы, что сервер запросит сертификат, подписанный полномочиями "SubCA", так как это - то, чем они предоставили нам. Я подозреваю, что то, что это работает в Chrome и openssl, - то, потому что они "менее строги", и Java просто идет "книгой" и сбоями.

Мне действительно удавалось соединить грязное обходное решение для этого, но я не очень доволен этим так, я буду радоваться, может ли кто-либо разъяснить этого для меня.

62
задан 12 December 2014 в 00:44

1 ответ

Вещь состоит в том, когда использование клиентского сертификата подписалось промежуточным, необходимо включать промежуточный в trustore, таким образом, Java может найти его. Или соло или как пакет с корнем, выходящим приблизительно

-1
ответ дан 31 October 2019 в 14:14

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

Похожие вопросы: