Я знаю, что этот вопрос задавали довольно давно, но все же; -)
Две возможные причины: вы не настроили доверительный менеджер, поэтому «для установленных провайдеров безопасности будет выполнен поиск наивысшего приоритета для соответствующей фабрики» (взято из Javadoc ). Может быть, вы случайно установили доверительный менеджер, принимая все.
В качестве альтернативы ваш клиент может вообще не пытаться выполнить TLS-аутентификацию клиента, потому что вы настроили необязательное требование, установив для setWantClientAuth
значение true
. Скорее всего, это перезаписало настройку, которую вы указали в строке выше setNeedClientAuth
до true
. Первый позволяет серверу сообщить клиенту «если у вас есть сертификат для меня, пожалуйста, отправьте его», а второй говорит «если у вас нет сертификата, даже не пытайтесь ...». Если по какой-то причине настроенный менеджер ключей не предоставляет сертификат и закрытый ключ для аутентификации клиента TLS, квитирование TLS будет успешным.
Использование сниффера TCP (например, Wireshark) должно помочь увидеть, действительно ли происходит аутентификация клиента TLS. В качестве альтернативы вы можете установить системное свойство -Djavax.net.debug=all
и прочитать всю отладочную информацию в STDOUT (см. Отладка соединений SSL / TLS , чтобы узнать больше об этом)