Apache で特定のユーザー名/パスワードを持つクライアント証明書を要求するにはどうすればよいでしょうか?

Apache で特定のユーザー名/パスワードを持つクライアント証明書を要求するにはどうすればよいでしょうか?

私のApache httpdサーバーではクライアントにいくつかのクライアント証明書が必要です(以下の手順に従って作成しました)。http://www.garex.net/apache/)。ユーザー名とパスワードの組み合わせに一致するクライアント証明書のみを認証して許可する認証も用意したいと思っています。

たとえば、CNuser1user2.htpasswdファイルを持つ2つのクライアント証明書がある場合

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]

関連情報