Вам нужно переместить строку «SSLCACertificateFile /etc/apache2/ssl/leos.pem» за пределы раздела «Местоположение» (поместите его рядом с файлом SSLCertificateFile). Если у вас уже есть файл SSLCACertificateFile - например, используемый для сертификатов SSL от внешней компании - и вы хотите добавить самозаверяющий CA для аутентификации на стороне клиента, просто добавьте свой сертификат CA в этот файл (один файл .crt может - и часто действительно - иметь несколько сертификатов).
Вы по-прежнему можете принудительно выполнять проверку только для тех каталогов, которые хотите защитить.
<LocationMatch "^/(admin|internal)($|/)">
SSLVerifyClient require
SSLVerifyDepth 1
SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
and %{SSL_CLIENT_I_DN_O} in {"CompanyName} \
and %{SSL_CLIENT_S_DN_OU} in {"OU1","OU2"} )
</LocationMatch>
Я не вижу причин, почему это не сработало бы с расположением, а не соответствием местоположения, но я этого не пробовал. Я использую сопоставление местоположения, потому что я реализовал его на прокси.
Вы также можете избавиться от / изменить строки SSL_CLIENT_ *, чтобы они соответствовали вашему сертификату. В одном месте, где я работаю, у нас есть разные типы сертификатов для разных людей с разными разрешениями - идентификация подразделения организации, а также соответствующие сертификаты позволяют разным группам разные разрешения - что означает доступ к разным местоположениям.
Я отмечаю, что тот же виртуальный контейнер используется конечными пользователями без сертификата - конечно, они не могут получить доступ к частям с "SSLVerifyClient require".