Назад | Перейти на главную страницу

Частичный запрос сертификата клиента для Apache HTTP

У меня есть 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>