Может ли аутентификация на основе взаимных сертификатов сосуществовать с базовой аутентификацией по SSL для разных путей в одном приложении? - PullRequest
2 голосов
/ 04 июля 2011

У меня есть сценарий, в котором мы разрабатываем приложение как с интерфейсом Business to Customer, так и с интерфейсом Business to Business.

Интерфейс B2B - это интерфейс RESTful, позволяющий изменять ресурсы, которыми интерфейс B2C управляет через множество приятных дружественных интерфейсов.

Поскольку интерфейс B2B обеспечивает доступ к большему количеству функциональных возможностей, чем интерфейс B2C, необходимо, чтобы интерфейс B2B использовал аутентификацию по взаимному сертификату.

Нашей целевой средой / стеком является Apache => Tomcat => Grails => Нерелевантная инфраструктура

Мое текущее исследование показывает, что Apache будет выполнять аутентификацию, а затем передавать детали аутентификации в Tomcat? Это тот случай? Я смотрел на плагин spring-security, который, кажется, обеспечивает то, что мы хотим, и я уверен, что мы могли бы предоставить любой из этих вариантов самостоятельно.

Я просто не видел дискуссий о настройке нескольких различных механизмов аутентификации.

Примечание: я не после резервной аутентификации. Если вы не можете получить доступ к B2B через Mutual Certificate auth, не должно быть возможности использовать базовую auth

1 Ответ

0 голосов
/ 04 сентября 2011

Да, вы можете.Есть 2 решения:

1.Первое решение

Хитрость в том, чтобы настроить Apache для запроса аутентификации клиента, но не требовать ее.Это настроено так в вашей конфигурации Apache:

<VirtualHost mysite:443>

  //usual SSL VHost config

  SSLVerifyClient optional


  RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
  RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
  RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
  RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"

  ProxyPass          http://localhost:50161/path_to_protect
  ProxyPassReverse   http://localhost:50161/path_to_protect

</VirtualHost>

На уровне приложения вы должны проверить, что для чувствительных путей Apache предоставляет сертификат, проверяя заголовок.Кроме того, вы также можете сделать это управление доступом на уровне Apache (с помощью тегов).Для нечувствительных путей вы можете настроить приложение так, чтобы оно запрашивало логин / пароли.

2.Второе решение

Вы можете объявить два виртуальных хоста в Apache: один, настроенный с SSLVerifyClient требуют и позволяющий получить доступ к вашему конфиденциальному пути, другой, настроенный с SSLVerifyClientнеобязательный , который разрешает доступ только к вашему нечувствительному пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...