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

cm0*_*007 4 ssl authentication ssl-certificate apache-2.2

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

举例来说,如果我有CN两个客户证书user1user2和htpasswd文件

user1:passwordA
user2:passwordB
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

SSLUserName %{SSL_CLIENT_S_DN_CN}
AuthName "Please enter your username and password"
AuthType Basic
AuthUserFile /path/.htpasswd
require valid-user
Run Code Online (Sandbox Code Playgroud)

但是,尝试这样做会导致 500 个错误。我能做什么?

Ser*_*sov 5

错误 500 是由于错误的SSLUserName语法 - 它应该不写%{...}

SSLUserName SSL_CLIENT_S_DN_CN
Run Code Online (Sandbox Code Playgroud)

但实际上,如果您想要求基本身份验证和证书名称匹配,您应该删除SSLUserName(这样mod_ssl就不会触及REMOTE_USER)并使用:

SSLRequire %{SSL_CLIENT_S_DN_CN} eq %{REMOTE_USER}
Run Code Online (Sandbox Code Playgroud)

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

RewriteEngine on
RewriteCond %{SSL:SSL_CLIENT_S_DN_CN} !=%{LA-U:REMOTE_USER}
RewriteRule ^ - [F]
Run Code Online (Sandbox Code Playgroud)