- PR -

URL openConnection()で止まってしまう。

投稿者投稿内容
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-10-07 02:22
よろしくお願いいたします。

今、ECサイトを開発中でクレジットの決済を代行するところにクレジットカード
情報を送信する処理を作成しています。そことの通信にはSSLを利用します。

以下のようにコネクションを作成して、決済代行システムのサーバーにデータをPOST
するようにしています。

URL u = new URL("https://IP Address/xxx/xxx?xxx=xxx");
HttpURLConnection hCon = (HttpURLConnection)u.openConnection();
以下にSSL認証処理

開発環境では、Windows上でTomcatを動かしてテストしています。また、Fedora Core1
のマシンもありますので、そちらでもTomcatを動かしてテストしています。JDK1.4です。

上記の開発環境では、WinとLinuxどちらでもクレジット決済サーバーと接続して、
問題なく動作しています。

ところが、運用環境のFreeBSD4.9&Tomcat5のマシンにインストールしてテストしたところ

HttpURLConnection hCon = (HttpURLConnection)u.openConnection();

のところで止まってしまい、そこから先に進んでくれません。別にエラーが出るわけでもなくずっと止まったままなのです。

全く原因が分からず困っています。原因すら見当が付かないため、何をどうしたらよいのか分かりません。

考えられる原因について、よろしければ教えていただけませんでしょうか。

よろしくお願いいたします。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-10-07 13:08
引用:

別にエラーが出るわけでもなくずっと止まったままなのです。


これはタイムアウト待ちということでしょうか?
仮にそうだと仮定して、運用環境からクレジット決済代行サイトまでは
ちゃんとHTTPSでパケットが通るんでしょうか?
ネットワーク周りの設定をまず検証してみたらいかがでしょう。
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-10-07 13:44
引用:

これはタイムアウト待ちということでしょうか?
仮にそうだと仮定して、運用環境からクレジット決済代行サイトまでは
ちゃんとHTTPSでパケットが通るんでしょうか?
ネットワーク周りの設定をまず検証してみたらいかがでしょう。



おばけさん、ありがとうございます。

サーバー環境の方はあまり得意な方ではありませんので、どう設定する必要があるのか
もよく分からないのですが。

運用サーバーからクレジット代行サーバーにPINGをうってみましたところ、ちゃんと
PINGは通っていました。

HTTPsの場合は、PINGとはまた違うのでしょうか。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2004-10-07 14:32
lynx, wget, curl などを使用して、きちんとアクセス対象の
HTTPサーバ(の443ポート)にアクセス出来る事を確認した方が良いかと思います。
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-10-07 14:39
引用:

でくのぼうさんの書き込み (2004-10-07 14:32) より:
lynx, wget, curl などを使用して、きちんとアクセス対象の
HTTPサーバ(の443ポート)にアクセス出来る事を確認した方が良いかと思います。



でくのぼうさん、ありがとうございます。

教えていただいたツールで試してみたいと思います。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-10-07 15:33
引用:

lynx, wget, curl などを使用して、きちんとアクセス対象の
HTTPサーバ(の443ポート)にアクセス出来る事を確認した方が良いかと思います。


HTTPの場合はTelnetで80番(や8080番など)にアクセスしてテストしますが、
HTTPSの場合は上記のようなツールを使うしかないのでしょうか?
どなたかコマンドラインベースのツールなどご存知ではないでしょうか?

便乗質問ですみません。
komey
ベテラン
会議室デビュー日: 2003/11/27
投稿数: 76
投稿日時: 2004-10-07 18:50
引用:

HTTPsの場合は、PINGとはまた違うのでしょうか。



PINGとはICMPというプロトコルを使います。
これに対し、HTTPSはTCPというプロトコルを使います。


わかりやすく言うと、ICMPにはポートという概念はなく、OSが受け取るものですが、HTTPSにはポートという概念があり、アプリケーションが受け取るものです。
よって、途中のネットワーク機器でフィルタリング(企業レベルだとICMPは通すことが多い)されていたり、アプリケーションが上がっていないような場合には、PINGは成功するがHTTPSには失敗する、ということが起こります。


引用:

HTTPの場合はTelnetで80番(や8080番など)にアクセスしてテストしますが、
HTTPSの場合は上記のようなツールを使うしかないのでしょうか?
どなたかコマンドラインベースのツールなどご存知ではないでしょうか?



今回のようにフィルタがかかっていないかどうか、相手がListenしているかどうかをチェックするぐらいでしたらHTTPと同じくTelnetで443番にアクセスでOKだと思いますよ。HTTPの場合と同じく、入力ができるような状態になればTCPセッションは張れています。

また、wgetもcurlもコマンドラインツールなので、自分のマシンであればパスの通っているところに置けばtelnetと同じ感覚で使えると思います。
客先で使う、というのにはちょっと向きませんが。。。



[ メッセージ編集済み 編集者: komey 編集日時 2004-10-08 14:48 ]
トラジャ
ベテラン
会議室デビュー日: 2002/12/05
投稿数: 75
投稿日時: 2004-10-08 01:26
引用:

今回のようにフィルタがかかっていないかどうか、相手がListenしているかどうかをチェックするぐらいでしたらHTTPと同じくTelnetで443番にアクセスでOKだと思いますよ。プロンプトが返ってきたらTCPセッションは張れています。

また、wgetもcurlもコマンドラインツールなので、自分のマシンであればパスの通っているところに置けばtelnetと同じ感覚で使えると思います。
客先で使う、というのにはちょっと向きませんが。。。



komeyさん、ありがとうございます。

さっそくtelnetで試してみました。そうしましたところ、相手サーバーの443ポートに
接続できました。

ということは、こちらの運用サーバーからクレジット決済代行サーバーに、パケット
の送信はできるはずだということでしょうか。

そうなると、肝心の

HttpURLConnection hCon = (HttpURLConnection)u.openConnection();

で止まってしまうのは他の原因ということでしょうか。

そもそも、このURL.openConnection()メソッドを呼び出した段階では、接続はどう
なっているのでしょう。このとき接続できるかどうか試みているのでしょうか。

スキルアップ/キャリアアップ(JOB@IT)