如何在Apache中使用特定的用户名/密码要求客户端证书?

我有几个客户端证书,我的Apache httpd服务器要求客户端(使用http://www.garex.net/apache/上的说明)。 我想有一个身份validation,也进行身份validation,并只允许客户端证书匹配用户名/密码组合。

例如,如果我有两个客户端证书与CN user1user2和.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 

但实际上如果你想要基本的authentication和证书名称匹配,你应该删除SSLUserName (这样mod_ssl不会碰到REMOTE_USER )并使用:

 SSLRequire %{SSL_CLIENT_S_DN_CN} eq %{REMOTE_USER} 

在configuration文件中直接使用(不在.htaccess )时可能会更好的工作的另一个选项:

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