Я пытаюсь создать часть Virtualhost
в apache, чтобы потребовать аутентификацию клиента. В VirtualHost
рассматриваемый также действует как обратный прокси для реального веб-сервера. Вот что я сделал:
ca.crt
, ca.csr
, и ca.key
на сервере, который я использую в качестве центра сертификации.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
дорожка.
Re-negotiation handshake failed: Not accepted by client!?
Это конфликт между использованием аутентификации клиента и обратным прокси-сервером? Или я сделал что-то еще не так?
HTTP-клиент отправляет HTTP-запрос только после согласования сеанса SSL, что означает, что сервер знает URL-адрес, запрошенный клиентом, только после настройки SSL. Поскольку вы меняете значение SSLVerifyClient
на основе URL-адреса Apache не может запросить сертификат клиента при первом согласовании сеанса SSL и вместо этого должен принудительно выполнить повторное согласование сеанса, как только он узнает URL-адрес. Кажется, что проблема заключается в этом повторном согласовании, поэтому я предлагаю вам протестировать его без этого, установив SSLVerifyClient require
в VirtualHost
блок и сняв его с Location
блок.
Основная проблема здесь - отказ от повторных переговоров. Это связано с деятельностью в течение последнего года или двух по исправлению уязвимости TLS, и были различные временные исправления отказа от повторного согласования до тех пор, пока не будет реализовано новое расширение TLS. Итак, вам нужно сделать одну вещь - убедиться, что ваш SSL (OpenSSL) и, возможно, ваш Apache HTTPD также обновлены / обновлены, насколько это возможно.