Я пытаюсь настроить сервер 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>