Я пытаюсь настроить SSL-соединения для веб-службы, которая является B2B, и мне нужно выполнить аутентификацию клиента на сервере.Поскольку на сервере размещены URL-адреса, которые также доступны обычным пользователям через браузер, не все подключения к хосту должны выполнять клиентскую аутентификацию.Только определенные URL-адреса требуют аутентификации клиента для проверки сертификата вызывающего абонента X509.Мы используем JBoss 5.x, который основан на Tomcat 5.x, поэтому у меня есть конфигурация соединителя, такая как:
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}" sslProtocol = "TLS"
scheme="https" secure="true" enableLookups="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/.myKeyStore"
keystorePass="password1" />
Как вы можете видеть, у меня настроено хранилище ключей, чтобы мы могли предоставить наш подписанный сертификати у меня есть clientAuth = false, поскольку определенные URL-адреса, требующие аутентификации клиента, будут настроены в web.xml следующим образом:
<security-constraint>
<web-resource-collection>
<web-resource-name>clientAuthResources</web-resource-name>
<url-pattern>/clientauth/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>authOnly</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>CLIENT-CERT</auth-method>
<realm-name>myRealm</realm-name>
</login-config>
<security-role>
<role-name>authOnly</role-name>
</security-role>
Через пользовательский модуль входа в систему JAAS я действительно могу заставить это работать, ЕСЛИ в соединителеконфиг выше я также определил склад доверенных сертификатов, который имеет клиентские сертификаты.Вот где моя проблема.Учитывая настройку нашего приложения и то, как мы масштабируем, каждая настройка сервера приложений jboss поддерживает определенную сегментацию наших пользователей, и я не хочу, чтобы хранилища доверенных сертификатов настраивались повсеместно в файловой системе.Нам нужно динамически загружать доверенные сертификаты в коде из нашей базы данных.Настраиваемый модуль входа в систему JAAS делает это на веб-уровне и также назначает роли, однако без хранилища доверенных сертификатов соединитель никогда не вызывает модуль входа в систему, соединение прерывается на уровне SSL, прежде чем задействуются HTTP-гетты.
После долгих исследованийя определил, что мне нужен пользовательский X509TrustManager, настроенный в SSLContext / SSLSocketFactory, чтобы обойти это.Этот пользовательский менеджер доверия также будет проверять клиентские сертификаты, которые хранятся в нашей базе данных.Я создал этот собственный менеджер доверия, но не могу его подключить.Кто-нибудь знает способ настроить это в jboss или tomcat 5.x?В Tomcat 7 я заметил следующую конфигурацию, доступную для соединителя, trustManagerClassName, однако это не вариант для меня.Я предполагаю, что это возможно, любая помощь очень ценится.