- - PR -
axisでWebサービスクライアントを作成。サーバーへ接続時にエラー
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-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 ] |
|
投稿日時: 2004-05-27 01:06
ちなみにインターネットとの接続環境は存在しますか?
|
|
投稿日時: 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-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-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