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