
Я пытаюсь настроить сервер 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.
решение1
Теперь у меня есть решение, просто используя или для исключения целевого 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>