#ApacheでIP制限とクライアント認証をor条件で運用する
あるIPから来たリクエストは無条件に許可し、それ以外のIPから来たリクエストについてはクライアント認証で許可不許可を判断したい。クライアント認証についての説明はよく見るが、上記のように併用する方法がなかなか見つからなかったのでメモ。
初めはsatisfy anyにすれば良いと思っていたが効かなかった。
##httpd.confにて下記設定をする。
尚、DirectoryディレクティブやLocationディレクティブでも使用できる。
許可するクライアント認証のコモンネームは複数指定する事が可能。
SSLVerifyClientをoptionalで、SSLRequireをorで運用する事が肝。
SSLVerifyClientについて
値 | 意味 |
---|---|
none | クライアント証明書の検証を行わない。 |
optional | クライアント証明書の提示があった場合は検証を行う。無い場合は処理を続行する |
require | かならずクライアント証明書の検証を行う。 |
optional_no_ca | クライアント証明書の提示があった場合は検証を行う。また、クライアント証明書はCAに登録されていなくてもよい。 |
httpd.conf
SSLCACertificateFile /etc/pki/CAフォルダ名/cacert.pem
SSLCARevocationFile /etc/pki/CAフォルダ名/crl.pem
SSLVerifyClient optional
Order allow,deny
allow from all
SSLUserName SSL_CLIENT_S_DN_CN
SSLRequire (%{SSL_CLIENT_S_DN_CN} in {"コモンネーム1", "コモンネーム2", "コモンネーム3"}) ¥
or ¥
(%{REMOTE_ADDR} =‾ m/^xxx¥.xxx¥.xxx¥.xxx$/)
##クライアント認証について
クライアント認証については下記が参考になりました。
http://www.webtech.co.jp/blog/optpix_labs/server/1780/