
我有幾個客戶端證書,我的 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]