Windows + J2SDK 1.4 + Apache 2.0 + SSL + Tomcat 4.1 セットアップ

ここでは Windows 上で Apache 2.0 + SSL の環境を構築する手順について説明します。

準備

下記ファイルをダウンロードします。

インストール

J2SDK 1.4

J2SDK 1.4 のセットアップ手順は、チュートリアルを参考にしてください。
(Webtribe/VisualFrame 1.1 リリース時に公開予定です。)

Apache 2.0

  1. ダウンロードした Apache_2.0.48-Openssl_0.9.7c-Win32.zip を c:\apache に展開します。
    ZIP ファイルに同梱されているコンフィグレーションファイル(httpd.conf, ssl.conf)は、c:\apache に展開されることを想定して記述されています。
    別のディレクトリに展開する場合は、それに合わせてコンフィグレーションを編集する必要があります。

  2. コマンドプロンプトを開いて、Apache2 をサービスに登録します。
    C:\WINNT>cd \

    C:\>cd \apache\bin

    C:\apache\bin>apache -k install

    Apache2 というサービスが登録されました。
    Apache2 をサービスに追加

Tomcat 4.1

Windows 環境での Tomcat 4.1 のセットアップは、リファレンスドキュメントのチュートリアルを参考にしてください。
(Webtribe/VisualFrame 1.1 リリース時に公開予定です。)

JK2

  1. ダウンロードした jakarta-tomcat-connectors-jk2.0.2-win32-apache2.0.43.zip を展開します。

  2. 展開したファイルの中から mod_jk2-2.0.43.dll を c:\apache\modules にコピーします。

証明書作成

「webtribe」で始まるファイル名は、環境に合わせて、適宜読み替えてください。
  1. 証明書用ディレクトリ作成。
    C:\WINNT>cd \apache\conf

    C:\apache\conf>
    md certs

    C:\apache\conf>cd certs

  2. 秘密鍵作成。(1024 ビットの RSA 形式、暗号化形式は Triple DES。)
    C:\apache\conf\certs>..\..\bin\openssl genrsa -des3 1024 > webtribe.key.pem
    Loading 'screen' into random state - done
    Generating RSA private key, 1024 bit long modulus
    .......................................................++++++
    ....................++++++
    e is 65537 (0x10001)
    Enter pass phrase:  <== パスフレーズを入力します。
    Verifying - Enter pass phrase:  <== もう一度パスフレーズを入力します。
    ここで入力したパスフレーズは後で使いますので、忘れないようにしてください。

  3.  秘密鍵からパスフレーズを削除。
    C:\apache\conf\certs>..\..\bin\openssl rsa -in webtribe.key.pem -out webtribe.key.pem
    Enter pass phrase for webtribe.key.pem:  <== 先ほど入力したパスフレーズを入力します
    writing RSA key
    秘密鍵からパスフレーズを削除すると、Apache 起動時にパスフレーズを入力する必要がなくなります。
    安全のため、Apache 起動時にパスフレーズを入力するようにしておきたい方は、この作業はスキップしてください。
    (Apache をサービス起動する場合は、起動時にパスフレーズを入力する箇所がありませんので、パスフレーズを削除しておく必要があると思います。)

  4. CSR を作成。
    まず、次の内容で c:\apache\conf\certs\openssl.cnf を作成します。
    [ req ]
    default_bits        = 1024
    default_keyfile     = privkey.pem
    distinguished_name    = req_distinguished_name
    attributes        = req_attributes
    x509_extensions    = v3_ca
    string_mask = nombstr

    [ req_distinguished_name ]
    countryName            = Country Name (2 letter code)
    countryName_default        = JP
    countryName_min            = 2
    countryName_max            = 2
    stateOrProvinceName        = State or Province Name (full name)
    stateOrProvinceName_default    = Osaka
    localityName            = Locality Name (eg, city)
    0.organizationName        = Organization Name (eg, company)
    0.organizationName_default    = Media Knowledge Industrial Co.,Ltd.
    organizationalUnitName        = Organizational Unit Name (eg, section)
    commonName            = Common Name (eg, YOUR name)
    commonName_max            = 64
    emailAddress            = Email Address
    emailAddress_max        = 64

    [ req_attributes ]
    challengePassword        = A challenge password
    challengePassword_min        = 4
    challengePassword_max        = 20
    unstructuredName        = An optional company name

    [ v3_req ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment

    [ v3_ca ]
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid:always,issuer:always

    サンプルをダウンロード。(ファイル名は openssl.cnf.txt となっていますので、ダウンロード後 openssl.cnf にリネームしてください。)

    作成した openssl.cnf を参照するよう環境変数を設定して、CSR を作成します。
    C:\apache\conf\certs>set OPENSSL_CONF=openssl.cnf

    C:\apache\conf\certs>..\..\bin\openssl req -new -key webtribe.key.pem -out webtribe.csr.pem
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [JP]:JP
    State or Province Name (full name) [Osaka]:Osaka
    Locality Name (eg, city) []:Osaka
    Organization Name (eg, company) [
    Media Knowledge Industrial Co.,Ltd.]:Media Knowledge Industrial Co.,Ltd.
    Organizational Unit Name (eg, section) []:Product
    Common Name (eg, YOUR name) []:webtribe.mki.ne.jp
    Email Address []:

    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    この時、Common Name にはサーバ名を指定します。
    サーバ名とは、URL の一部として指定するホスト名を指します。
    例えば、クライアントから https://webtribe.mki.ne.jp/webtribe/RunClient.jnlp に接続して JWS を起動する場合は、「webtribe.mki.ne.jp」を Common Name に指定します。
    実行時には、証明書の Common Name と接続先 URL のホスト名が一致するかどうかチェックされます。

  5. 自己署名の証明書作成。
    C:\apache\conf\certs>..\..\bin\openssl x509 -in webtribe.csr.pem -out webtribe.cert.pem -req -signkey webtribe.key.pem -days 365
    Loading 'screen' into random state - done
    Signature ok
    subject=/C=JP/ST=Osaka/L=Osaka/O=Media Knowledge Industrial Co.,Ltd./OU=Product/CN=webtribe.mki.ne.jp
    Getting Private key

    -days パラメータは証明書の有効期限が切れるまでの日数を指定します。

コンフィグレーション

Apache 2.0

Tomcat 4.1

JK2

起動

Apache 2.0

サービスマネージャから開始します。

Tomcat 4.1

サービスマネージャから開始します。

確認

ブラウザの URL に https://hostname/webtribe/readme.txt を入力して、readme.txt の内容が表示できるかどうかを確認します。
hostname は、実際に接続するサーバのホスト名に置き換えます。
webtribe は、実際に Webtribe/VisualFrame をセットアップしたコンテキストルート名(プロジェクト名)に置き換えます。

証明書インポート(クライアント Java 環境)

JWS からサーバに https で接続する場合、接続先のサーバ証明書が認証局のものではなく、自己署名されたサーバ証明書を使っている場合、Java VM がサーバ証明書の正当性を確認することができないため、J2SDK のバージョンによって、エラー、または警告が発生します。(UntrustedServerError)

補足
J2SDK 1.3.1_09 ではサーバ証明書の正当性を確認することができなかった場合、エラーになり、サーバに HTTPS で接続することができませんでしたが、J2SDK 1.4.2_02 の動作を確認したところ、警告ダイアログが表示され、ユーザの責任のもとにサーバに HTTPS で接続することができるようになっています。

そこでサーバ証明書をクライアント側にインポートしておくことにより、Java VM がサーバの正当性を識別できるようになります。

(例) J2SDK 1.4.2_02 を C ドライブにセットアップしている場合に、サーバ証明書 c:\certs\webtribe.cert.pem をインポートする手順。
コマンドプロンプトから次の操作を行います。
(あらかじめサーバ証明書をc:\certs にコピーしておきます。)
C:\WINNT>cd \Program Files\Java\j2re1.4.2_02\lib\security

C:\Program Files\Java\j2re1.4.2_02\lib\security>keytool -import -trustcacerts -keystore cacerts -alias webtribe -storetype jks -file c:\certs\webtribe.cert.pem
キーストアのパスワードを入力してください:  changeit  <== cacerts の初期パスワードは changeit です
所有者: CN=webtribe.mki.ne.jp, OU=Product, O="Media Knowledge Industrial Co.,Ltd.", L=Osaka, ST=Osaka, C=JP
実行者: CN=webtribe.mki.ne.jp, OU=Product, O="Media Knowledge Industrial Co.,Ltd.", L=Osaka, ST=Osaka, C=JP
シリアル番号: 0
有効日: Fri Dec 05 15:19:15 JST 2003 有効期限: Sat Dec 04 15:19:15 JST 2004
証明書のフィンガープリント:
         MD5:  35:F5:E2:D7:2F:75:0B:4A:00:B5:ED:1B:48:16:07:B2
         SHA1: 7A:9C:41:93:BD:29:D6:E0:6C:49:80:57:D2:F5:A7:6D:67:60:11:10
この証明書を信頼しますか? [no]:  yes
証明書がキーストアに追加されました。

各パラメータは次のような意味があります。
パラメータ
説明
-import
インポート
-trustcacerts
インポートするのは、信頼できる認証局の発行した証明書
(自己署名のサーバ証明書を信頼する、ということになります。)
-keystore
信頼されたルート証明書を格納するファイル
-alias
インポートする証明書の別名
-storetype
証明書ストアのタイプ
-file
証明書ファイル


当ドキュメントは、Windows 2000 での動作を元に作成しました。