Posted at

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

More than 3 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/