Я уже некоторое время бьюсь головой об стену и надеюсь, что кто-нибудь объяснит мне, что я делаю неправильно. У меня есть сервер 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.
Я системный инженер, поэтому понятия не имею, возможно, это нужно делать в самом приложении? Любая помощь приветствуется.
javax.net.ssl.keyStore
, для получения клиентских сертификатов (см. Java SSL и хранилище ключей сертификатов). Вы только настроили хранилище ключей для использования Tomcat в качестве сервера (ситуация похожа на этот вопрос). - person Piotr P. Karwasz   schedule 16.05.2021