Приложение, работающее на tomcat, не может пройти клиентскую аутентификацию при подключении к службе

Я уже некоторое время бьюсь головой об стену и надеюсь, что кто-нибудь объяснит мне, что я делаю неправильно. У меня есть сервер tomcat, на котором развернуто приложение и связывается с другой службой. Все работает до тех пор, пока клиент не активирует клиентскую аутентификацию на своем балансировщике нагрузки. Tomcat ->app-lb с аутентификацией клиента -> конечная точка Включение отладки рукопожатия на jvm возвращает это:

javax.net.ssl|FINE|0F|myScheduler-1| UTC|ServerHelloDone.java:151|Consuming ServerHelloDone handshake message (
<empty>
)
javax.net.ssl|FINE|0F|myScheduler-1| UTC|CertificateMessage.java:299|No X.509 certificate for client authentication, use empty Certificate message instead
javax.net.ssl|FINE|0F|myScheduler-1| UTC|CertificateMessage.java:330|Produced client Certificate handshake message (
"Certificates": <empty list>
)

Насколько я читал, это означает, что не было найдено сертификатов, которые соответствовали бы требованиям клиентской аутентификации. Приложение и SSL-порт tomcat имеют свое определенное хранилище ключей и в нем пары ключей для обоих, и, хотя они разные, оба должны пройти, поскольку аутентификация клиента запрашивает только сертификат, подписанный с определенным CA (они оба). А внутри cacerts у меня есть все необходимые сертификаты органов УЦ. Я попытался поместить сами сертификаты в cacerts, но тот же результат. Конфигурация порта Tomcat:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true"
            clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2"
            keystoreFile="/usr/local/tomcat/config/pkcs_keystore.jks"
            keystorePass="***************"
            keyAlias="server_alias" />

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

Я системный инженер, поэтому понятия не имею, возможно, это нужно делать в самом приложении? Любая помощь приветствуется.


person Adrian Perkovic    schedule 16.05.2021    source источник
comment
Клиенты Java SSL используют хранилище ключей, указанное системным свойством javax.net.ssl.keyStore, для получения клиентских сертификатов (см. Java SSL и хранилище ключей сертификатов). Вы только настроили хранилище ключей для использования Tomcat в качестве сервера (ситуация похожа на этот вопрос).   -  person Piotr P. Karwasz    schedule 16.05.2021
comment
@PiotrP.Karwasz Я сделал это (установил -Djavax.net.ssl.keyStore и -Djavax.net.ssl.trustStore в хранилище ключей), но все равно получаю ту же ошибку. Они указывают на одно и то же хранилище ключей, содержащее две пары ключей и сертификаты ЦС. Возможно ли, что мои сертификаты имеют неправильный формат?   -  person Adrian Perkovic    schedule 16.05.2021
comment
Если приложение tomcat, которое выполняет вызов службы, принадлежит вам, почему бы вам не загрузить необходимое хранилище ключей и не выполнить выбор ключа на уровне кода? См., например, stackoverflow.com/a/60845060/150978   -  person Robert    schedule 16.05.2021
comment
@Robert К сожалению, я не могу этого сделать, я получаю только готовое приложение в формате .war. :/   -  person Adrian Perkovic    schedule 16.05.2021