Como exijo certificados de cliente com um nome de usuário/senha específico no Apache?

Como exijo certificados de cliente com um nome de usuário/senha específico no Apache?

Eu tenho vários certificados de clientes que meu servidor Apache httpd exige que os clientes tenham (feitos usando as instruções emhttp://www.garex.net/apache/). Gostaria de ter uma autenticação que também autenticasse e permitisse que apenas um certificado de cliente correspondesse a uma combinação de nome de usuário/senha.

Por exemplo, se eu tiver dois certificados de cliente com CN user1e user2arquivo .htpasswd

user1:passwordA
user2:passwordB

Eu gostaria de algo como

SSLUserName %{SSL_CLIENT_S_DN_CN}
AuthName "Please enter your username and password"
AuthType Basic
AuthUserFile /path/.htpasswd
require valid-user

No entanto, tentar isso resulta em 500 erros. O que posso fazer?

Responder1

O erro 500 é devido à SSLUserNamesintaxe errada – deve ser escrito sem %{...}:

SSLUserName SSL_CLIENT_S_DN_CN

Mas, na verdade, se você quiser que a autenticação básica e o nome do certificado correspondam, você deve remover SSLUserName(para que mod_sslnão toque em REMOTE_USER) e usar:

SSLRequire %{SSL_CLIENT_S_DN_CN} eq %{REMOTE_USER}

Outra opção que pode funcionar melhor quando usada diretamente no arquivo de configuração (não em .htaccess):

RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} !=%{LA-U:REMOTE_USER}
RewriteRule ^ - [F]

informação relacionada