- - PR -
Axisでベーシック認証のサーバ証明書
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-09-01 17:02
いつもお世話になっています。
さて、早速ですが AxisでSOAPクライアントを作成しています。 作成したクライアントから、別システムのサーバに接続しようとしたところ、 以下のような例外が出力されます。 ------ javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) おそらく、サーバー側の証明書が正しくないのだと思います。 IE7, Safariでは証明書エラーになりませんでしたが、 Firefox2.0では、証明書が信頼されていないダイアログがでてきました。 サーバー側に証明書をインストールしてもらうのが一番の解決なので そちらは生憎と対応できません。 そこで、Axisで証明書を無視する方法はないでしょうか? もし、原因が間違っていましたらご指摘下さい。 よろしくお願い致します。 | ||||||||
|
投稿日時: 2008-09-01 17:47
>javax.net.ssl.SSLHandshakeException
SSLのハンドシェイクに失敗しているのであって、ベーシック認証とか関係ないですよね? >No trusted certificate found Javaは信頼できる証明書がないと言ってます。 接続するサーバが信頼できるのであれば、証明書を実行しているJavaRuntimeのトラストストアに読み込ませなくてはなりません。 くどいようですが(第三者機関によって)信頼されていない証明書をインストールするわけですから、自己責任で行わなくてはなりません。 証明書のインストールはkeytoolのマニュアルを参照ください。 | ||||||||
|
投稿日時: 2008-09-02 18:09
わたなべ様
回答ありがとうございます。 Javaで信頼できる証明書がないというのは分かりました。 この解決方法は、証明書を入れるしかないのでしょうか? プログラムで、証明書を無視するような変更はできないのでしょうか? コネクションに証明書を誤摩化すような変更を加える方法があるそうなのですが、 AxisのAPIを使う場合、直接コネクションに手を入れることができなく困っています。 | ||||||||
|
投稿日時: 2008-09-02 19:19
これをするならSSLを使う意味がまったくないと思います。
オープンソースなのだから、困ることはないと思いますよ? | ||||||||
|
投稿日時: 2008-09-02 20:24
>この解決方法は、証明書を入れるしかないのでしょうか?
サービスを提供している側がSSLを求めている以上、サービスを受ける側がどうこうできる訳がありません。 >AxisのAPIを使う場合、直接コネクションに手を入れることができなく困っています。 URLをhttpsにすれば、サーバに接続した時点で証明書要求が発行され、SSL通信の準備が行われます。 後はAPIの裏方が必要な手続きを行いますので、クライアントが何か意識する必要はありません。 ですが、信頼できる証明書がなければその手続きを行えないので、keytoolでインストールするなどの方法をとります。 そうすれば、コネクションを直接触れなくとも通信できます。 まずはSSLについて簡単な解説でも読んでみたほうがいいと思います。 何時までも話はかみ合わないと思いますので。 | ||||||||
|
投稿日時: 2008-10-01 00:12
> プログラムで、証明書を無視するような変更はできないのでしょうか?
できます。 証明書検証はしない(全ての証明書を信用する)けれど、 通信は暗号化したいということですよね。 > コネクションに証明書を誤摩化すような変更を加える方法があるそうなのですが、 例えば、HttpsURLConnection や Jakarta-Commons HttpClient でしたら このサイトが参考になると思います。 http://trasis.jp/blog/lab/2008/07/%E8%87%AA%E5%89%8D%E8%AA%8D%E8%A8%BC%E5%B1%80%E3%81%AEssl%E3%82%B5%E3%83%BC%E3%83%90.html > AxisのAPIを使う場合、直接コネクションに手を入れることができなく困っています。 axisのソースを見たところSocketでした。 やり方は同じなのでaxisのソースを直接書き換えればもちろんできますが、 手を入れなくても一部オーバーライドしたclassを作るだけで出来そうです。 (1)org.apache.axis.components.net.JSSESocketFactory をオーバーライドして証明書検証無しのSocketを返すclassを作る。 (2)org.apache.axis.components.net.SocketFactoryFactory を一度newしてからJSSESocketFactoryを指定しているstaticな箇所を 上記で作ったclassにして上書き。 と思って検索したら同じこと書いてるサイトがありました。 参考になると思います。 http://www.mail-archive.com/axis-user@ws.apache.org/msg21734.html |
1