クライアント認証(証明書認証)は、SSL環境を設定して、SSL通信時にクライアントから送信されるクライアント証明書によりアクセス制御を行います。
また、環境定義ファイル(httpd.conf)にクライアント証明書の属性情報に対する認証条件を設定して、クライアント証明書の条件設定によるアクセス制御を行うこともできます。
クライアント認証(証明書認証)を設定するための手順を以下に示します。
SSL環境を設定します。SSL環境を設定については、「3.10 SSLの設定」を参照してください。SSL環境として、SMEEコマンドで構築した証明書/鍵管理環境を使用する場合は、環境定義ファイル(httpd.conf)の設定時に「クライアント認証あり」を指定してください。
クライアント証明書の条件設定によるアクセス制御を行う場合は、さらに環境定義ファイル(httpd.conf)を設定します。詳細については、「環境設定ファイル(httpd.conf)の設定」を参照してください。
■環境定義ファイル(httpd.conf)の設定
環境定義ファイル(httpd.conf)の設定方法を以下に示します。
SSLCertExpand On (1) SSLNotifyVers On (2) RewriteEngine On (3) RewriteCond %{ENV:環境変数A} 条件パターンA (4) RewriteCond %{ENV:環境変数B} 条件パターンB RewriteRule .* - [L] (5) RewriteCond %{ENV:環境変数C} 条件パターンC RewriteCond %{ENV:環境変数D} 条件パターンD RewriteRule .* - [L] RewriteRule .* - [F] (6)
SSLCertExpandディレクティブに「On」を設定して、クライアント証明書情報の環境変数の設定を有効とします。省略可(省略時:On)。
SSLNotifyVersディレクティブに「On」を設定して、SSL関連の環境変数の設定を有効とします。省略可(省略時:On)。
RewriteEngineディレクティブに「On」を設定して、リライト機能を有効とします。
RewriteCondディレクティブに、以下の環境変数に対する条件パターンを指定して、クライアント証明書の属性情報に対する認証許可条件を設定します。
環境変数名 | クライアント証明書の項目 |
---|---|
SSL_CLIENT_CN | 氏名 |
SSL_CLIENT_C | 国名 |
SSL_CLIENT_EMAIL | メールアドレス |
SSL_CLIENT_O | 組織名 |
SSL_CLIENT_OU | 組織単位名 |
SSL_CLIENT_T | 肩書 |
SSL_CLIENT_PHONE | 電話番号 |
SSL_CLIENT_ST | 州/都道府県 |
SSL_CLIENT_L | 市町村名 |
条件パターンには、環境変数の値を判定するための条件を、正規表現で指定します。条件パターンの文字列の前にエクスクラメーションマーク(!)を付加し、正規表現にマッチしないパターンの条件を指定することもできます。文字列内に空白を指定する場合は、文字列をダブルクォーテーション(")で囲みます。
ポイント
(5)のRewriteRuleディレクティブの前に、RewriteCondディレクティブを複数設定して、併用する認証許可条件を設定できます。
RewriteRuleディレクティブに[L]フラグを指定して、(4)のRewriteCondディレクティブで設定した認証許可条件に従ってアクセス許可を設定します。
ポイント
(4)のRewriteCondディレクティブと(5)のRewriteRuleディレクティブの組合せを複数設定して、複数の認証許可条件を設定できます。
RewriteRuleディレクティブに[F]フラグを指定して、上記で設定した認証許可条件に不一致なクライアント証明書を送信したクライアントのアクセス拒否を設定します。
注意
RewriteCondディレクティブに指定する環境変数の詳細については、「付録B 環境変数とサーバ変数」を参照してください。
ServletサービスのアプリケーションのURLに対してクライアント証明書によるアクセス制御を設定する場合は、<Location>セクションの中に設定してください。
認証条件に応じた設定例を以下に示します。
■組織による認証条件の設定
例
以下のいずれかの条件に一致するクライアント証明書のアクセスを許可する場合
組織名「organizationA」、かつ組織単位名「organizationAunit1」/「organizationAunit2」
組織名「organizationB」、かつ組織単位名「organizationBunit1」・「organizationBunit2」以外
組織名が「organization」(大文字と小文字の区別なし)で始まる文字列、かつ肩書に「Manager」を含む文字列
LoadModule rewrite_module "C:/Interstage/F3FMahs/modules/mod_rewrite.so" RewriteEngine On RewriteCond %{ENV:SSL_CLIENT_O} ^organizationA$ RewriteCond %{ENV:SSL_CLIENT_OU} ^organizationAunit1$|^organizationAunit2$ RewriteRule .* - [L] RewriteCond %{ENV:SSL_CLIENT_O} ^organizationB$ RewriteCond %{ENV:SSL_CLIENT_OU} !(^organizationBunit1$|^organizationBunit2$) RewriteRule .* - [L] RewriteCond %{ENV:SSL_CLIENT_O} "^organization.*" [NC] RewriteCond %{ENV:SSL_CLIENT_T} .*Manager.* RewriteRule .* - [L] RewriteRule .* - [F]
LoadModule rewrite_module "/opt/FJSVahs/modules/mod_rewrite.so" RewriteEngine On RewriteCond %{ENV:SSL_CLIENT_O} ^organizationA$ RewriteCond %{ENV:SSL_CLIENT_OU} ^organizationAunit1$|^organizationAunit2$ RewriteRule .* - [L] RewriteCond %{ENV:SSL_CLIENT_O} ^organizationB$ RewriteCond %{ENV:SSL_CLIENT_OU} !(^organizationBunit1$|^organizationBunit2$) RewriteRule .* - [L] RewriteCond %{ENV:SSL_CLIENT_O} "^organization.*" [NC] RewriteCond %{ENV:SSL_CLIENT_T} .*Manager.* RewriteRule .* - [L] RewriteRule .* - [F]
■地域による認証条件の設定
例
以下のいずれかの条件に一致するクライアント証明書のアクセスを許可する場合
国名「JP」、かつ都道府県「Tokyo」/「Osaka」/「Kyoto」
国名「US」、かつ州「California」/「New York」
LoadModule rewrite_module "C:/Interstage/F3FMahs/modules/mod_rewrite.so" RewriteEngine On RewriteCond %{ENV:SSL_CLIENT_C} ^JP$ RewriteCond %{ENV:SSL_CLIENT_ST} ^Tokyo$|^Osaka$|^Kyoto$ RewriteRule .* - [L,E=REMOTE_USER:JP-user] RewriteCond %{ENV:SSL_CLIENT_C} ^US$ RewriteCond %{ENV:SSL_CLIENT_ST} "^California$|^New York$" RewriteRule .* - [L,E=REMOTE_USER:US-user] RewriteRule .* - [F]
LoadModule rewrite_module "/opt/FJSVahs/modules/mod_rewrite.so" RewriteEngine On RewriteCond %{ENV:SSL_CLIENT_C} ^JP$ RewriteCond %{ENV:SSL_CLIENT_ST} ^Tokyo$|^Osaka$|^Kyoto$ RewriteRule .* - [L,E=REMOTE_USER:JP-user] RewriteCond %{ENV:SSL_CLIENT_C} ^US$ RewriteCond %{ENV:SSL_CLIENT_ST} "^California$|^New York$" RewriteRule .* - [L,E=REMOTE_USER:US-user] RewriteRule .* - [F]
参考
関連ディレクティブ