Linux
CentOS
Apache

ApacheでIP制限とクライアント認証をor条件で運用する

More than 2 years have passed since last update.

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/