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

Настройка аутентификации сертификата клиента в apache

Я пытаюсь создать часть Virtualhost в apache, чтобы потребовать аутентификацию клиента. В VirtualHost рассматриваемый также действует как обратный прокси для реального веб-сервера. Вот что я сделал:

...

ProxyPass / http://xxx.xxx.xxx.xxx:80/
ProxyPassReverse / http://xxx.xxx.xxx.xxx:80/
ProxyPassReverseCookiePath / /

SSLEngine On
SSLCertificateFile "/private/etc/apache2/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/server.key"
SSLCertificateChainFile "/private/etc/apache2/ca_bundle.crt"
SSLCACertificateFile "/private/etc/apache2/self_ca.crt"
SSLVerifyClient none
SSLOptions StrictRequire   
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

<Location /clientauth>
    # These options force the client to authenticate with a client certificate.
    SSLVerifyClient require
    SSLVerifyDepth 1
</Location>

Но я не могу перейти к /clientauth дорожка.

Это конфликт между использованием аутентификации клиента и обратным прокси-сервером? Или я сделал что-то еще не так?

HTTP-клиент отправляет HTTP-запрос только после согласования сеанса SSL, что означает, что сервер знает URL-адрес, запрошенный клиентом, только после настройки SSL. Поскольку вы меняете значение SSLVerifyClient на основе URL-адреса Apache не может запросить сертификат клиента при первом согласовании сеанса SSL и вместо этого должен принудительно выполнить повторное согласование сеанса, как только он узнает URL-адрес. Кажется, что проблема заключается в этом повторном согласовании, поэтому я предлагаю вам протестировать его без этого, установив SSLVerifyClient require в VirtualHost блок и сняв его с Location блок.

Основная проблема здесь - отказ от повторных переговоров. Это связано с деятельностью в течение последнего года или двух по исправлению уязвимости TLS, и были различные временные исправления отказа от повторного согласования до тех пор, пока не будет реализовано новое расширение TLS. Итак, вам нужно сделать одну вещь - убедиться, что ваш SSL (OpenSSL) и, возможно, ваш Apache HTTPD также обновлены / обновлены, насколько это возможно.