- PR -

axisでWebサービスクライアントを作成。サーバーへ接続時にエラー

1
投稿者投稿内容
こざる
会議室デビュー日: 2003/09/17
投稿数: 8
投稿日時: 2004-05-26 11:02
現在、以下の環境でWebサービスクライアントを作成しています。
●axis-1_1RC2
●j2sdk1.4.1_02
●tomcat4.1.24+IIS5.0

サーバーへの接続にはhttpsを使わないといけないので
System.setProperty("javax.net.ssl.trustStore",
"C:/j2sdk1.4.1_02/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
System.setProperty("java.protocol.handler.pkgs",
"com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

というように、SSLの準備をしてから、サーバーへ通信すると以下のエラーが発生します。
情報: ; nested exception is:
java.net.ConnectException: Connection timed out: connect
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.ConnectException: Connection timed out: connect
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace: java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:426)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(DashoA6275)
・・・・

なぜ、このようなエラーが発生してしまうのか
Webサービス&SSL初心者の私には理由がよくわかりません。。

どなたかご教授願いないでしょうか?
どうぞよろしくお願い致します。。
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2004-05-26 17:04
このエラーはHTTPS(SSL)の問題でしょうか?
Connection timed outしているから別の問題じゃないでしょうか?
HTTPでも同じエラーがでるか確認して見てください。

HTTPで問題なければ下記は大丈夫でしょうか?

サーバ証明書と認証局の証明書があると思いますが
C:/j2sdk1.4.1_02/jre/lib/security/cacerts
のファイルに認証局の証明書は入れているでしょうか?

又、サーバ証明書のSubjectのCommonNameとサーバホスト名は
同一にしているでしょうか?

ここが正しくないとSSLの接続確立時にエラーになります。

[ メッセージ編集済み 編集者: いっきゅう 編集日時 2004-05-26 17:07 ]
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2004-05-27 01:06
ちなみにインターネットとの接続環境は存在しますか?
こざる
会議室デビュー日: 2003/09/17
投稿数: 8
投稿日時: 2004-05-27 09:34
>ちなみにインターネットとの接続環境は存在しますか?
はい、存在します。。

>HTTPで問題なければ下記は大丈夫でしょうか?
HTTPでは問題ないようです。

>C:/j2sdk1.4.1_02/jre/lib/security/cacerts
>のファイルに認証局の証明書は入れているでしょうか?
http://www.verisign.com/support/install/intermediate.html
中間CA局証明書をcacertsにインポートしたのですが・・。
インポートの仕方が悪かったのでしょか?

いろいろご指摘ありがとうございます。
もう少しいろいろ調べてみます。。
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2004-05-27 12:34
> >C:/j2sdk1.4.1_02/jre/lib/security/cacerts
> >のファイルに認証局の証明書は入れているでしょうか?
> http://www.verisign.com/support/install/intermediate.html
> 中間CA局証明書をcacertsにインポートしたのですが・・。
> インポートの仕方が悪かったのでしょか?

中間CAは必要なかったはずです、、
ルート認証局が入っていれば良いです。

気になったのですが上記の中間CAから発行された証明書が
サーバ証明書なんですね?

そうだとしたらJavaのバージョンが古いので気になったのですが
そのルートCAならデフォルトで格納されていますが
今年の1月に期限切れしている物が格納されている可能性が高いので
keytool -v -list -storepass changeit -keystore <省略>/cacerts
で内容確認してそのルートCAの有効期間を確認して見て下さい。
未記入
会議室デビュー日: 2005/07/23
投稿数: 12
投稿日時: 2005-11-19 15:52
>現在、以下の環境でWebサービスクライアントを作成しています。
>●axis-1_1RC2
>●j2sdk1.4.1_02
>●tomcat4.1.24+IIS5.0
>サーバーへの接続にはhttpsを使わないといけないので

この件に非常に近いことで困っています。
axis1.1,WebSphere5.1.2,j2sdk1.4.2_09環境でhttpsのWebサービスをしようと思います。

1. この環境でhttpsのWebサービス実現可能ですか?
 ---------------------------------
 新しいWebサービスセキュリティ提案は、あなたのエンドポイントに対する呼び出し側の認証と、
 同様にその逆 (呼び出し側に対するあなたのエンドポイントの認証) も提供します。
 Axis はまだこれを実装していませんが、姉妹プロジェクト [英語] で XML 署名を提供しています。
 ---------------------------------
 axisのサイトにはこのように書かれていて、どうにもはっきりしません。
 もちろん、このスレなどでhttpsに関するものはみつかるのですが....

2. 具体的にどうするのでしょう?どこから手を加えてよいかわかりません。
 もちろんhttp環境でのWebサービスは実現できています。
 このWebサービスはWSDLを作成しWebSphereでaxis1.0SOAPを指定してクライント/サーバ側のクラスを自動生成したものです。
 (実際に動かすときにはaxis1.1を使います)

 方法論として、
 ・クライント側を修正(Webサービス呼出側)
 ・サーバ側を修正
 ・WSDLを修正
 などの案が考えられます。

◆クライント側を修正(Webサービス呼出側)
 このスレにあるような↓をクライアントコードで実装する方法ですが・・・
 System.setProperty("javax.net.ssl.trustStore","C:/j2sdk1.4.1_02/jre/lib/security/cacerts");
 System.setProperty("javax.net.ssl.trustStorePassword","changeit");
 System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

 証明書系はj2sdk1.4ですので標準装備なので、とりあえず知識なしに上記コードを埋め込んだ所、
 Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
 この文がコンパイルエラーになります。com.sun.net.ssl.internal.ssl.Provider()が見つからないのだとか??

 と、これは深い所まで考えていません。
 なぜなら、このコードを埋め込んだとしても、自動生成されたaxisのクライアント側コード内で、
 URLオブジェクトの生成などを行っていますので、そもそもhttpsになるわけがないと思っているからです。

◆サーバ側を修正
 これも自動生成されたコードのことですが、どこをイジってよいのか検討がつきません。
 通信プロトコルの部分ではありますが、プロトコルのsetter類が見あたらないので、簡単にはできないのでしょうか?
 もし、「不可能ではないがかなりの改造が必要」などであればhttps対応は見送ろうと思います。

◆WSDLを修正
 とあるサイトで、
 ---------------------------------
 Axisは、マニュアルにもあるように、単にwsdlにhttpsとあればhttps系のクラス
(HttpURLConnectionの代わりにHttpsURLConnectionなど)を利用するようである。
 ---------------------------------
 という記述をみつけたので、これが正攻法なのかなと思っています。

 マニュアルがどの部分を指すのかわからなかったのですが、
 ・wsdlのエンドポイントをhttpsに変更
 ・WebSphereでスタブ/タイクラスを自動生成
 ・クライアント側にsetProperty系の実装
 このような作業順序になるのでしょうか?

以上、乱文になってしまいましたが、情報提供おねがいします。
1

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