Назад | Перейти на главную страницу

Как мне потребовать клиентские сертификаты с определенным именем пользователя и паролем в Apache?

У меня есть несколько клиентских сертификатов, которые мой 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]