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

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

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

例如,如果我有两个带有 CNuser1user2.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]

相关内容