Apacheでのクライアント証明書利用設定入門
Apacheでのクライアント認証はBASIC認証が有名ですが、より安全な認証方法が、クライアント証明書を利用する方法です。
以下で、クライアント証明書利用設定の入門部分を紹介しますが、最初のポイントは、以下の2点です。
- BASIC認証はhttpプロトコルでも利用できるが、クライアント証明書利用認証はhttpsプロトコルでのみ利用できる
- クライアント証明書の中間証明書、root証明書を「SSLCertificateChainFile」として認証を受けるサーバーで指定する必要がある
最も基本的なクライアント証明書利用設定
Apacheでのクライアント証明書利用設定は httpd.conf ssl.conf などのApacheの設定ファイルで行います。
設定ファイルの名称や位置はApacheのバージョン、利用環境によって異なりますが、httpsのVirtualHost設定を行っているファイルで行います。
httpsのVirtualHost設定の最小要件は、一般に以下のような要素で構成されています。
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.yourdomain.com
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
以下が、上記のVirtualHostにクライアント証明書による認証を追加した最も基本的な設定例です。
<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName www.yourdomain.com
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/DigiCertCA.crt
SSLCACertificateFile /path/to/DigiCert_root.crt
#<Directory /var/www/html/auth_need>
SSLVerifyClient require
SSLVerifyDepth 10
#</Directory>
※墨太文字部分が追加した部分です。
高度なクライアント証明書利用設定
より厳密なクライアント認証を行うために以下のディレクティブを利用することができます。
SSLRequire
クライアント証明書に含まれる情報やそれ以外のクライアント情報を判定し、認証を行うことができます。
よく使われるのが「SSL_CLIENT_S_DN」による判定です。「SSL_CLIENT_S_DN」はクライアント証明書名を示します。
「SSL_CLIENT_S_DN_O」等は以下の通り CSR で使われる指定(例:”/C=JP/ST=Tokyo/L=Tama City/O=RMS Co. Ltd./OU=RMS Co. Ltd./CN=*creative-japan.org”)と対応しています。
SSL_CLIENT_S_DN —————- 証明書 Subject
SSL_CLIENT_S_DN_C —————- 国名
SSL_CLIENT_S_DN_ST —————- 都道府県名
SSL_CLIENT_S_DN_L —————- 都市名
SSL_CLIENT_S_DN_O —————- 組織名
SSL_CLIENT_S_DN_OU —————- 部署名
例えば以下のように指定した場合、クライアント証明書の組織名が「RMS Co. Ltd.」で部署名が「Support」、「Planning」、「Marketing」のどれかだった場合認証が成功します。
SSLRequire ( %{SSL_CLIENT_S_DN_O} eq “RMS Co. Ltd.” \
and %{SSL_CLIENT_S_DN_OU} in {“Support”, “Planning”, “Marketing”} )
「SSLRequire」で指定可能な変数については、
Apache Module mod_sslページの「Standard CGI/1.0 and Apache variables」と「SSL-related variables」を参照してください。
SSLOptions
SSLOptionsでは「StdEnvVars」「ExportCertData」「FakeBasicAuth」「StrictRequire」「OptRenegotiate」の機能を指定できます。
機能を利用する場合は、
SSLOptions +FakeBasicAuth
のように「+」記号付きで指定します。
※+FakeBasicAuthが指定された場合、クライアント証明書のsubjectをBasic認証のユーザー名に利用することができます。
クライアント証明書を使った認証のさまざまな事例については mod_ssl 2.8, User Manual The Apache Interface to OpenSSLを参照してください。
「SSLCACertificateFile」で利用する中間証明書、root証明書を取得する方法は、クライアント証明書をインストールしたブラウザによって異なります。
Chrome・IE・Edgeの場合
-
「スタート」ボタンをクリックし、検索ボックスに「certmgr.msc」と入力して Enter キーを押します。「certmgr」が表示されます。
-
左メニューで「個人」->「証明書」の順にクリックし、右ペインで対象のクライアント証明書をダブルクリックします。
-
証明書ウィンドウで「証明書のパス」タブをクリックします。
-
DigiCert中間証明書を選択し、「証明書の表示」ボタンをクリックします。
-
DigiCert中間証明書の証明書ウィンドウが開きます。「詳細」タブをクリックします。
-
「発行者」を選択し、「ファイルにコピー」ボタンをクリックします。
-
「証明書のエクスポートウィザード」で「次へ」をクリックします。
-
「エクスポートファイルの形式」ページで「Base64 encoded X.509(.CER)」を選択し「次へ」をクリックします。開いた「エクスポートするファイル」ページで「参照」をクリックします。
-
ファイルマネージャーで保存するディレクトリを選択し、「ファイルの種類」を「すべてのファイル」に変更し、保存するファイル名の拡張子を .pem とし、「保存」をクリックします。
-
「エクスポートするファイル」ページで「次へ」をクリックします。
-
「証明書のエクスポートウィザードの完了」ページで「完了」をクリックし、最終確認で「OK」をクリックします。
「証明書」の順にクリック” title=””>
FireFox の場合
-
直接取得することが困難ですので、一旦、クライアント証明書をエクスポートします。エクスポート手順は、以下の「Firefox」を参照してください。
-
エクスポートされたクライアント証明書をWindows証明書ストアにインポートします。
インポート手順は、以下を参照してください。
-
インポートされた証明書から認証局の中間証明書、root証明書を取得する方法は、「Chrome・IE・Egeの場合」とまったく同一です。
関連情報