У меня есть веб-API с балансировщиком нагрузки HA Proxy. Веб-API использует сертификаты аутентификации клиентов для аутентификации и авторизации. Я бы хотел, чтобы устройство HA Proxy разорвало соединение TLS и использовало обычный HTTP на бэкэнде для взаимодействия с веб-API, но мне нужен сертификат аутентификации клиента, переданный через HTTP-соединение. Как нужно настроить прокси-сервер HA для хранения сертификата аутентификации по запросу из серверной части, но с использованием только HTTP?
Вы можете настроить отправку различных HTTP-заголовков на серверную часть относительно представленного сертификата клиента TLS. Например:
frontend intranet
bind 10.20.30.40:443 ssl crt /etc/haproxy/pem/server.pem ca-file /etc/haproxy/pem/client-chain.pem verify required
http-request set-header X-SSL %[ssl_fc]
http-request set-header X-SSL-Client-Verify %[ssl_c_verify]
http-request set-header X-SSL-Client-SHA1 %{+Q}[ssl_c_sha1]
http-request set-header X-SSL-Client-DN %{+Q}[ssl_c_s_dn]
http-request set-header X-SSL-Client-CN %{+Q}[ssl_c_s_dn(cn)]
http-request set-header X-SSL-Issuer %{+Q}[ssl_c_i_dn]
http-request set-header X-SSL-Client-Not-Before %{+Q}[ssl_c_notbefore]
http-request set-header X-SSL-Client-Not-After %{+Q}[ssl_c_notafter]
default_backend your_backend
После этого ваше приложение должно проверить заголовки и предпринять соответствующие действия.
Этот пример взят из raymii.org где вы можете найти дополнительную полезную информацию об использовании клиентских сертификатов с HAProxy, например о проверке сертификата клиента и отклонении недействительных сертификатов.