答え:
HTTPService、WebService タグを使ってサーバーと通信をするとき、Flex プレゼンテーションサーバーは、その通信の中継点(プロキシ)となります。 このため、SSL 通信でサーバーと通信をする場合、Flex プレゼンテーションサーバーは、SSL 通信の受け手となると同時にターゲットサーバーにアクセスをする送り手ともなります。 双方の観点で Flex プレゼンテーションサーバーが正しくセットアップされていなければ SSL 通信を行うことはできません。
SSL 通信のサーバー機能はJ2EE サーバーの機能がそのまま利用されます。通常、J2EE サーバーは IIS や Apache といった Webサーバーと連携させます。そしてこれら Webサーバー側に SSL 機能を持たせることで、SSLの通信機能は実現されます。 各J2EE サーバーでの SSL 機能の設定方法について詳細は各製品のマニュアルなどをご確認ください。
Flex を JRun 統合設定でインストールしたとき、Webサーバー機能は JRun 内蔵の Webサーバー機能(JWS) を利用しています。この WebサーバーにSSLを設定することは不可能ではないようですがかなり専門の知識が必要になります。 SSL 通信を実現するにあたっては Flex は何らかの J2EE サーバー上にデプロイ、この J2EE サーバーに SSL でアクセスできるよう設定を行うという方法をお勧めします。
この観点で設定が正しくされているかの確認方法:
.mxml を https://... の URLからアクセスして呼び出したとき、正しく実行することができる。
特に テスト用証明書を使って SSL 通信を行う場合、SSL のクライアントとして Flex プレゼンテーションサーバーが正しく通信できるよう、追加の設定を行う必要があります。
作業としては 認証局から発行された証明書(テスト用ルート証明書)を JVM が持つ cert store にインポートします。
テスト用ルート証明書は、テスト発行した証明書で警告メッセージが出ないようにするためにブラウザーに設定するものとして提供されるものです。 Flex アプリケーションが SSL 通信をするとき、Flex プレゼンテーションサーバーはSSL 通信のクライアントともなるため、 この証明書をサーバー側にインポートします。
- 認証局から入手した証明書(テスト用ルート証明書)を JVM の cert store の場所に保存します。これは通常
<JAVA_HOME>\jre\lib\security
の下になります。(必ず、Flex を起動する WebLogic サーバーが利用する JVM に対して作業します。)
- 「コマンドプロンプト」を開き、先ほど証明書を保存した場所に移動します。
- コマンドラインから Javaコマンドを実行できることを確認してください。もし実行できないようであれば、環境変数を設定し、実行できるようにします。
- Cert store のバックアップを取ります。
例:
copy cacerts cacerts.org
- 次のコマンドを実行し、証明書をインポートします。
> keytool -import -trustcacerts -alias [ユニークな名前] -file [取得した証明書のファイル名]
> -keystore cacerts
例:
keytool -import -trustcacerts -alias defaultwebservercert -file defaultwebserver.cer -keystore cacerts
- パスワードを聞いてきたら JVM cert store のデフォルトのパスワード changeit を入力します。
- サーバーを再起動します。
このほか、JVM のバージョンが古いと JVM に入っている証明書の期限が切れているため、SSL 通信ができないということがあります。この点については、次のドキュメントを参考にしてください。
http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_19298
ちなみにわたしは IIS 5.0 + JRun 4.0 + Flex 1.5 という組み合わせで、HTTPService タグで SSL 通信が正しくできることを確認しました。
|