Передача DN сертификата клиента в развернутое приложение в Tomcat - PullRequest
0 голосов
/ 16 ноября 2018

Я настроил Tomcat на требование взаимной аутентификации по TLS, установив clientAuth="true" в conf/server.xml файле:

<Connector 
      port="8443"
      protocol="org.apache.coyote.http11.Http11NioProtocol"
      maxThreads="150"
      SSLEnabled="true"
      scheme="https"
      secure="true"
      keystoreFile="conf/server.p12"
      keystorePass="1t3TcUQY*2j^"
      truststoreFile="conf/cacerts"
      truststorePass="fx!eAKQO2^0c"
      clientAuth="true"
      sslProtocol="TLS"
      sslEnabledProtocols="TLSv1.2">
</Connector>

Все хорошо, и Tomcat принимает клиентов только с действительными сертификатами.

Проблема в том, что веб-приложение, развернутое в Tomcat, не имеет представления о личности клиента.Под идентичностью я подразумеваю информацию о субъекте, такую ​​как его отличительное имя (DN), которое появляется в сертификате клиента.Таким образом, веб-приложение не может принимать решения по управлению доступом на основе идентификатора клиента.

Существует ли у Tomcat способ передать эту информацию развернутому приложению после успешной аутентификации?

1 Ответ

0 голосов
/ 19 ноября 2018
  1. Сертификаты клиента доступны как request.getAttribute("javax.servlet.request.X509Certificate") в виде массива сертификатов.Прочитайте Спецификацию сервлета для официального ознакомления.В спецификации Servlet 4.0, которая является главой 3.10 Атрибуты SSL .

  2. Если ваше приложение настроено с login-config/auth-method из CLIENT-CERT, то аутентификатор в Tomcat будет выполнять аутентификациюклиентского сертификата.Фактическая обработка делегируется Царству.

    Если аутентификация прошла успешно, из сертификата извлекается имя пользователя и создается java.security.Principal.Извлечение имени пользователя настраивается с помощью атрибута X509UsernameRetrieverClassName Царства.См. Ссылка на конфигурацию области .

    (Для справки в Tomcat 9: org.apache.catalina.authenticator.SSLAuthenticator.doAuthenticate (), org.apache.catalina.realm.RealmBase.authenticate (X509Certificate []))

...