FC2ブログ
googleで
カスタム検索
プロフィール

けろ&ひな

Author:けろ&ひな
大阪在住。
親ばか。
最近、転職したよ。でも、やってることは一緒なんだけどね。;-P

最近の記事
カテゴリー
月別アーカイブ
最近のコメント
最近のトラックバック
スポンサード リンク

スポンサーサイト--------(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[flex][BlazeDS]SSLアクセラレータ経由でやられた。2010-05-20(Thu)

はい。やられました。

本番の構成はこう。

[Client]
 flex:swf
 ↓↑ https (443)

[LB・SSLアクセラレータ]

 ↓↑ http (80)

[webサーバ]
 apache
 ↓↑ http (80)

[APサーバ]
 tomcat

で、何がやられたかっていうと

クライアントからは https://~ でセキュアポート使って通信してるつもり
なんですけど、サーバ上では http://~ になってて
最終的にはセキュアポート使って flex←→java の通信ができてないみたいなんだけど。。。ということ。

で、結論を先に。

BlazeDSの設定ファイルである、services-config.xmlがあります。
SSLを使用する場合は、これにSSL(セキュア)の場合と通常の場合の2つのamfについての設定があるはず。

具体的には
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint" />
(その他の記述)
</channel-definition>
><channel-definition id="my-amf-secure" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint" />
<add-no-cache-headers>false</add-no-cache-headers>
(その他の記述)
</channel-definition>

といった内容。

で、これを↓のように変えるとOKです。
<channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
<endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint" />
(その他の記述)
</channel-definition>
<channel-definition id="my-amf-secure" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.AMFEndpoint" />
<add-no-cache-headers>false</add-no-cache-headers>
(その他の記述)
</channel-definition>


何が変わったかというと
<channel-definition id="my-amf-secure" class="mx.messaging.channels.SecureAMFChannel">
<endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.AMFEndpoint" />

の部分です。

つまり、swfはセキュアでやり取りをする際もサーバ側で使用するmessagebrokerは通常のクラスと同じものを使用してね。ということ。

これについては、BlazeDSの説明でfirewall/reverse HTTP proxyの後ろにAPサーバがある場合はこうやってね。
という記事がありました。。。orz
Using BlazeDS clients and servers behind a firewall

ここに辿り着くのに、こちらのサイトにお世話になりました。助かりました。
知識創造記述者の日々:BlazeDS 入門記

これに気付いた理由は、ブラウザからやり取りしてるHTTPのヘッダを覗いてみると
最初にブラウザからはmessagebroker/amfsecureでリクエストを送ってます。
が!これがサーバー側でエラーになって返ってきてるんです。
こんなメッセージ付きで。
flex.messaging.security.SecurityException: Secure endpoint '/messagebroker/amfsecure' must be contacted via a secure protocol.

messagebroker/amfsecureで使われるのはセキュア用のクラスなのに、なんでセキュアじゃないの?
そんなんじゃ困るなぁって感じ?

んで、その直後に再度、今度はmessagebroker/amfでリクエストを送りなおしてるようで、こちらはOKになる。
てことで、次からはmessagebroker/amfメインで通信をやると。
いう感じみたいです。(Fiddlerを使って確認しましたー)

それじゃーってことで、messagebroker/amfsecureで使うクラスも通常と同じにすればいいんだ。
ということ。

んで、設定やってビルドしてテストーと思ったら環境作る必要があったよ。。。
だって、開発はローカルのマシンでEclipse+Tomcatでやってるんですもの。。。
最低でも、似た環境にしないことにはテストにならないじゃなーーい。 orz

仕方ないので、ローカルにapache入れて、そいつをSSLリバースプロキシに仕立てて
他のマシンに入ってるtomcatにhttp://で通信するようにして、パブリッシュしましたよ。

めんどくさかった。。。

apacheのSSLの設定とかについては、また後日書くことにしようっと。
関連記事

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

コメント

工事中
RSSフィード
リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。