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

Как мне потребовать клиентские сертификаты с определенным именем пользователя/паролем в 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. Что я могу сделать?

решение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]

Связанный контент