Я пытаюсь настроить сервер Apache с включенной сертификацией клиента. Чтобы клиенты могли получить доступ к контенту с действующим клиентским сертификатом.
Скажем, у меня есть сервер, работающий как
https://myserver/myservice/
Также мне нужно предоставить моим клиентам интерфейс для получения их клиентских сертификатов, предоставив некоторую информацию для аутентификации
https://myserver/myservice/register
После проверки информации о загрузке возвращается сертификат клиента.
Если я правильно понимаю, этот путь следует исключить из механизма сертификации клиентов просто потому, что он используется для генерации сертификатов. Итак, вопрос в том, как я могу указать конфигурацию httpd для этого?
Моя текущая конфигурация выглядит так:
ProxyPass /myservice/register http://localhost:4444/register
<Virtualhost *:443>
ServerName myserver
DocumentRoot /path/to/my/server/root
ProxyPass /myservice/ ajp://localhost:8009/myservice/
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /path/to/server.cert
SSLCertificateKeyFile /path/to/server.key
...
SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile /path/to/ca.buddle.pem
</Virtualhost>
С этой конфигурацией я могу получить сертификат клиента из
http://myserver/myservice/register
затем получить доступ к сервису, используя его. Однако мне не удалось установить его на https, чтобы я мог закрыть порт 80.
Теперь у меня есть решение, просто используя или для исключения целевого URL-пути.
<Virtualhost *:443>
ServerName myserver
DocumentRoot /path/to/my/server/root
ProxyPass /myservice/register http://localhost:4444/register
ProxyPass /myservice/ ajp://localhost:8009/myservice/
SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /path/to/server.cert
SSLCertificateKeyFile /path/to/server.key
...
SSLVerifyClient require
SSLVerifyDepth 10
SSLCACertificateFile /path/to/ca.buddle.pem
<LocationMatch ^/myservice/register$>
SSLVerifyClient none
</LocationMatch>
</Virtualhost>