У меня есть HTTP-сервер Apache с включенным SSL и запрашивающий сертификат клиента.
Как настроить Apache так, чтобы он запрашивал сертификат только тогда, когда пользователь попадает на определенную часть веб-сайта?
Пример:
/ myapp / не должен запрашивать сертификат
/ myapp2 / должен запросить сертификат
Примечание. Эти приложения обслуживаются с использованием мода-jk.
Что-то вроде этого должно творить чудеса:
<Directory /myapp2>
SSLVerifyClient require
</Directory>
<Directory /myapp>
SSLVerifyClient none
</Directory>
Подробнее о директиве SSLVerifyClient Вот.
Хитрость здесь в том, что вам нужно сделать это в tomcat. Поскольку это то, что на самом деле обрабатывает запрос.
Поскольку аутентификация клиента выполняется для каждого соединителя, вам необходимо создать 2 новых соединителя. Один для базового SSL с аутентификацией и один для коннектора mod_jk (выбранные порты произвольно выбираются как cur + 1).
<!-- Client Auth Connector on port 8444 -->
<!--
<Connector port="8444"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS" />
-->
<!-- Client auth ajp connector on port 8010 -->
<Connector port="8010"
enableLookups="false" redirectPort="8444" debug="0"
protocol="AJP/1.3" />
Затем просто настройте вторичного работника mod_jk для подключения к клиентской аутентификации SSL в apache для / myapp2
Это может сработать: http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html#arbitraryclients
Как я могу аутентифицировать своих клиентов по определенному URL-адресу на основе сертификатов, но при этом разрешить произвольным клиентам доступ к остальным частям сервера?
Для этого мы снова используем функцию реконфигурации каталога mod_ssl: httpd.conf
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>