У нас есть внутренняя служба, работающая по HTTP, с экземпляром Apache 2.4 (Debian Bullseye), установленным перед ней в качестве прокси для HTTPS. Apache и HTTPS запущены и работают, но есть дополнительные требования к клиентским сертификатам — в частности, запросы GET и HEAD могут выполняться анонимно, но все другие методы должны предоставлять действительный клиентский сертификат, соответствующий определенным условиям.
Программное обеспечение, которое мы создаем, нацелено на IIS, поэтому Apache для нас — нечто неизвестное (первоначальный разработчик с тех пор ушел). Наши попытки адаптировать унаследованную нами конфигурацию имеют часть конфигурации сайта (без директив пути к файлу сертификата) как:
SSLVerifyClient необязательно
SSLVerifyDepth 10
ProxyPass /internal http://<internalIP>:/internal
ProxyPassReverse /internal http://<internalIP>:/internal
SSLOptions +StdEnvVars
<Расположение/внутреннее>
Отклонить заказ, разрешить
Разрешить от всех
<LimitExcept GET>
SSLRequire ( %{SSL_CLIENT_S_DN_O} eq "(org)" и %{SSL_CLIENT_S_DN_OU} eq "(unit)" и %{SSL_CLIENT_S_CN} eq "(name)" )
</LimitExcept>
</местоположение>
Мы еще не пробовали это с клиентским сертификатом, например. POST, потому что простой GET для https://<прокси>/внутренний
теперь происходит сбой с ошибкой 403 и сообщением errors.log:
AH02229: не удалось получить доступ к прокси: http://{internalIP}/internal, причина: выражение требования SSL не выполнено
На первый взгляд это выглядит как SSLRequire
проверка также применяется к GET, в отличие от <LimitExcept>
.
Есть ли комбинация директив, которые мы можем использовать для получения желаемого поведения? (В идеале тот, который отходит от явно устаревшего SSLRequire
также.)