У меня есть несколько клиентских сертификатов, которые мой 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 ошибкам. Что я могу сделать?
Ошибка 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]