如何在 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]

相關內容