DigiCert証明書の正規代理店株式会社アールエムエス
DigiCert サーバー証明書利用団体
  1. ホーム
  2. サポート
  3. 技術情報
  4. Apacheでのクライアント証明書利用設定入門

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>

墨太文字部分が追加した部分です。

  • SSLCACertificateFileでクライアント証明書を発行した認証局の中間証明書、root証明書を指定します。
    ファイルの書式はpemです。上の例で用いる DigiCert_root.crt ファイルは以下のような内容になります。
    -----BEGIN CERTIFICATE----- ..................... ..................... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ..................... ..................... -----END CERTIFICATE-----
  • https接続設定で「SSLCertificateChainFile」ではなく「SSLCACertificateFile」を利用している場合は、そのファイルにクライアント証明書を発行した認証局の中間証明書、root証明書を追加します。
    クライアント証明書を発行した認証局の中間証明書、root証明書の取得方法は以下を参照してください。
  • クライアント認証は特定のディレクトリ以下を対象とすることもできます。
    その場合、上の例ではコメントアウトしていますが、<Directory >...</Directory>あるいは<Location >...</Location>を使ってディレクトリを指定します。
    また .htaccessファイルでの指定も有効です。
  • 「SSLVerifyClient require」がクライアント認証を要求する指定です。
  • 「SSLVerifyDepth」はクライアント(ブラウザ)が提出したクライアント証明書の正当性をroot証明書によって確認するよう要求する指定です。
    有効な証明書を持っていないことを決定する前に、どれくらい深く確認しなければならないかを指定します。「SSLVerifyDepth 0」の場合、自己署名証明書を受け入れます。

高度なクライアント証明書利用設定

より厳密なクライアント認証を行うために以下のディレクティブを利用することができます。

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認証のユーザー名に利用することができます。
「SSLOptions」については、SSLOptions Directiveを参照してください。

クライアント証明書を使った認証のさまざまな事例については mod_ssl 2.8, User Manual The Apache Interface to OpenSSLを参照してください。

認証局の中間証明書、root証明書を取得する

「SSLCACertificateFile」で利用する中間証明書、root証明書を取得する方法は、クライアント証明書をインストールしたブラウザによって異なります。

Chrome・IE・Edgeの場合
  1. 「スタート」ボタンをクリックし、検索ボックスに「certmgr.msc」と入力して Enter キーを押します。「certmgr」が表示されます。

    検索ボックスに「certmgr.msc」と入力して Enter

  2. 左メニューで「個人」->「証明書」の順にクリックし、右ペインで対象のクライアント証明書をダブルクリックします。

    クライアント証明書をダブルクリック

  3. 証明書ウィンドウで「証明書のパス」タブをクリックします。

    「証明書のパス」タブをクリック

  4. DigiCert中間証明書を選択し、「証明書の表示」ボタンをクリックします。

    「証明書の表示」ボタンをクリック

  5. DigiCert中間証明書の証明書ウィンドウが開きます。「詳細」タブをクリックします。

    「詳細」タブをクリック

  6. 「発行者」を選択し、「ファイルにコピー」ボタンをクリックします。

    「ファイルにコピー」ボタンをクリック

  7. 「証明書のエクスポートウィザード」で「次へ」をクリックします。

    「証明書のエクスポートウィザード」で「次へ」をクリック

  8. 「エクスポートファイルの形式」ページで「Base64 encoded X.509(.CER)」を選択し「次へ」をクリックします。開いた「エクスポートするファイル」ページで「参照」をクリックします。

    「Base64 encoded X.509(.CER)」を選択

  9. ファイルマネージャーで保存するディレクトリを選択し、「ファイルの種類」を「すべてのファイル」に変更し、保存するファイル名の拡張子を .pem とし、「保存」をクリックします。

    保存するファイル名の拡張子を .pem

  10. 「エクスポートするファイル」ページで「次へ」をクリックします。

    「エクスポートするファイル」ページで「次へ」をクリック

  11. 「証明書のエクスポートウィザードの完了」ページで「完了」をクリックし、最終確認で「OK」をクリックします。

    「個人」->「証明書」の順にクリック

  12. 同様に、クライアント証明書の「証明書」ウィンドウの「証明書のパス」でDigiCert の root 証明書を選択し、上記中間証明書で行ったのと同じ手順で、root 証明書の .pem ファイルを取得できます。

    DigiCert の root 証明書 .pem ファイルを取得

FireFox の場合
  1. 直接取得することが困難ですので、一旦、クライアント証明書をエクスポートします。エクスポート手順は、以下の「Firefox」を参照してください。
    DigiCertコードサイニング証明書をブラウザでエクスポートする方法
    ※コードサイニング証明書についての説明ですので、「コードサイニング証明書」を「クライアント証明書」に読み替えてください。
  2. エクスポートされたクライアント証明書をWindows証明書ストアにインポートします。
    インポート手順は、以下を参照してください。
    DigiCertコードサイニング証明書をインポートする方法
    ※コードサイニング証明書についての説明ですので、「コードサイニング証明書」を「クライアント証明書」に読み替えてください。
  3. インポートされた証明書から認証局の中間証明書、root証明書を取得する方法は、「Chrome・IE・Egeの場合」とまったく同一です。

関連情報

SSL サーバ証明書とは?
30日間テスト証明書
30日間返金保証制度あり!
コードサイニング証明書
ドキュメントサイニング証明書
デジタル証明書ニュース
HTTPS入門
digicert.comトピックス&ニュース