$Id: https-guide.html,v 1.4 2004-05-31 01:27:24+09 taiji-k Exp $

https サーバの設定方法


はじめに

このドキュメントは、サーバ証明書を使って https サーバと https クライアント(ブラウザ)の相互認証を行い、対象とするユーザに特定 のWebページを閲覧してもらうための設定方法について説明をします。

このドキュメントは、Apache HTTP サーバ http://httpd.apache.org/ の設定 と X.509 形式の公開鍵証明書に関する基本的な知識を持っている方を対象 としています。 Apache HTTP サーバを使って World Wide Web サーバを構築したことが ない方は、「Apache HTTP サーババージョン 2.0 ドキュメント」 http://httpd.apache.org/docs-2.0/ を参考になさって下さい。 また X.509 形式の公開鍵証明書の有効性の検証をしたことがない方には IPA による PKI 関連技術解説 の第三章「認証局と電子証明書」 http://www.ipa.go.jp/security/pki/031.html が参考になります。

このドキュメントでは以下のバージョンのソフトウェアを使うことを想定しています。


設定の手順

このドキュメントでは以下の手順で設定するものとします。
  1. 証明書の取得と必要なファイルの用意
  2. ファイルの配置
  3. 設定ファイルの編集
なお、クライアント認証の際に必要になる設定項目については、"クライアント認証の場合"と特記してあります。すでにサーバ認証を行なっているサーバでクライアント認証を行なうように設定する場合に、参考にして下さい。

証明書の取得と必要なファイルの用意

https サーバで利用できるサーバ証明書を取得して下さい。 WIDE moCA のCAが発行しているサーバ証明書は "サーバ証明書の発行申請" http://moca.wide.ad.jp/moca_guide/new-server-cert.html に書いてある手順に従うと申請することができます。 発行された証明書は基本的に電子メールを使って配布されます。

証明書を取得したら、以下のファイルを用意します。



証明書関連ファイルの配置

前節の手順で用意したファイルを、サーバの設定ファイルで指定するディレクトリの置き、検証に必要なシンボリックリンクの作成を行ないます。

ファイルは PEM 形式で置きます。PEM 形式は以下のようなテキストの形式です。

-----BEGIN CERTIFICATE-----
MIIDaDCCAlCgAwIBAgIBHTANBgkqhkiG9w0BAQUFADA2MQswCQYDVQQGEwJKUDEV
MBMGA1UEChMMV0lERSBQcm9qZWN0MRAwDgYDVQQDEwdST09UIENBMB4XDTAwMDEy
:
mqo+8k1ltDM5gH/a+CR9yY+4VSo7B6h8ijNTInEl6YYOMgJ8S5jvCB0IhUB4aGKy
WJR+SzGDIQkyGHFp
-----END CERTIFICATE-----
証明書を保存する形式には、この PEM 形式の他に DER 形式、BER 形式があります。
moCA の配布するサーバ証明書は PEM 形式です。

ここでは、以下のようにファイルを置くものとします。

httpd の設定

httpd の SSL に関する設定ファイルである ssl.conf の基本的な設定項目について説明します。
前節までに述べたファイルの置き場所を記述する例を紹介します。

以上の設定項目は証明書の置き場所に関するものです。
SSL の設定にはこの他に、以下のような設定項目があります。設定項目とデフォルト値を列挙します。

4. アクセス制御

SSL を使ってクライアント認証を行なうと、クライアント証明書に含まれる情報を使ったアクセス制御を行うことができます。
このアクセス制御は、mod_auth及びmod_accessを使った規則に加えて、httpd が持つ証明書の内容にもとづいた規則を使って行なうことができます。 ここでは、環境変数の値に応じたアクセス制御を行う例を紹介します。
すべての例では以下の設定を行なっているものとします。
 SSLEngine on
 SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
 SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key
 SSLCertificateChainFile /usr/local/apache2/conf/ssl.crt/ca.crt
 SSLCACertificatePath /usr/local/apache2/conf/ssl.crt
 SSLCARevocationPath /usr/local/apache2/conf/ssl.crl
  1. 特定のディレクトリ /usr/local/apache2/htdocs/require-clientauth で クライアント認証を要求する場合
     <Directory /usr/local/apache2/htdocs/require-clientauth>
     SSLVerifyClient require
     SSLVerifyDepth 2
     </Directory>
     
    この設定によって /usr/local/apache2/htdocs/require-clientauth/ 以下に あるファイルは、クライアント認証が成功しなければアクセスできません。

  2. 特定のディレクトリに /usr/local/apache2/htdocs/require-cjp で クライアント認証を要求し、クライアントの証明書の DN 中の C が JP である 場合にのみアクセスを許可する場合
     <Directory /usr/local/apache2/htdocs/require-cjp>
     SSLVerifyClient require
     SSLVerifyDepth 2
     SSLRequire ( %{SSL_CLIENT_S_DN_C} eq "JP" )
     </Directory> 
    クライアント証明書の中のフィールドは、環境変数を参照することができます。 参照することができる環境変数の例を SSLに関係する環境変数にまとめます。

a. SSLに関係する環境変数

SSLを使って接続すると httpd (mod_ssl) によって以下のような環境変数が 設定されます。

環境変数名 説明 値の例
HTTPS SSLを使った接続であるかどうか on, off
REMOTE_USER BasicAuth 機能を使って認証された際のユーザ名 taiji-k
SSL_PROTOCOL 接続に使われているSSLのプロトコル名 TLSv1, SSLv2, SSLv3 のうちのどれか
SSL_CLIENT_VERIFY クライアント認証が成功しているかどうか NONE, SUCCESS, GENEROUS, FAILED:理由 のうちのどれか
SSL_CIPHER SSLで使われている暗号とハッシュアルゴリズムの名前 RC4-MD5
SSL_CIPHER_USEKEYSIZE SSLで使われている暗号鍵のビット長 128
SSL_CIPHER_ALGKEYSIZE SSLで使われる暗号鍵の可能性ビット長 128
SSL_SERVER_A_KEY SSLで使われている暗号アルゴリズムの名前 rsaEncryption
SSL_SERVER_A_SIG SSLで使われている署名アルゴリズムの名前 sha1WithRSAEncryption


参考文献


Kimura Taiji <taiji-k@is.aist-nara.ac.jp>
moCA