
У меня есть несколько клиентских сертификатов, которые требуются моему серверу Apache httpd для клиентов (созданных с использованием инструкций по адресуhttp://www.garex.net/apache/). Я хотел бы иметь аутентификацию, которая также аутентифицирует и позволяет только клиентскому сертификату соответствовать комбинации имени пользователя и пароля.
Например, если у меня есть два клиентских сертификата с CN user1
и user2
файлом .htpasswd
user1:passwordA
user2:passwordB
Я бы хотел что-то вроде
SSLUserName %{SSL_CLIENT_S_DN_CN}
AuthName "Please enter your username and password"
AuthType Basic
AuthUserFile /path/.htpasswd
require valid-user
Однако попытка сделать это приводит к ошибкам 500. Что я могу сделать?
решение1
Ошибка 500 возникает из-за неправильного SSLUserName
синтаксиса — ее следует писать без %{...}
:
SSLUserName SSL_CLIENT_S_DN_CN
Но на самом деле, если вы хотите, чтобы базовая аутентификация и имя сертификата совпадали, вам следует удалить SSLUserName
(чтобы это mod_ssl
не касалось REMOTE_USER
) и использовать:
SSLRequire %{SSL_CLIENT_S_DN_CN} eq %{REMOTE_USER}
Другой вариант, который может работать лучше при использовании непосредственно в файле конфигурации (не в .htaccess
):
RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} !=%{LA-U:REMOTE_USER}
RewriteRule ^ - [F]