- PR -

SocketでのSSL通信について

1
投稿者投稿内容
うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2005-05-16 22:23
お世話になります。

SSLによるサーバ間通信を行う為に
Socketを用いたSSLクライアントを開発しています。
しかし、通信時に
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
というエラーになってしまいます。

インターネットで例外とメッセージの意味を調べたところ
正しい証明書が取得できていないということまでは分かりました。
そこで、
1. SocketでSSL通信する場合はクライアント側にも何か設定が必要なのでしょうか?
2. クライアント側に設定するとしたら何を設定すればよいのでしょうか?
というところがインターネットで調べてもいまいち分かりません。
上記を解決する方法、もしくは参考にできるURL等何がございましたら、
ご教授願います。

ちなみに、SSLクライアントはSSLSocketを使用していて、
SocketFactory factory = SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket)factory.createSocket(host,443);
という形で取得しています。
※その他は通常のSocketと同様の使用方法で、Socketを用いたHTTP通信は
うまく動いています。
そして、wgetではサーバ側から正しくレスポンスが返って来ます。

クライアントとなるサーバ環境は
RedHat+apache1.3+tomcat5+j2sdk1.4
で、サーバ側は
Windowsサーバ+PHP
です。
※SSL通信に必要なjsseはjdk1.4についているものを使用しています。
sia
常連さん
会議室デビュー日: 2004/05/02
投稿数: 38
投稿日時: 2005-05-16 22:55
はじめまして

確認です。
サーバ証明はどのようなものでしょうか? 中間CA証明局などで、適切に署名がなされた物でしょうか?

1.中間CAもしくはルートCAで署名がなされている
2.1ではなくテスト用に自己署名を施した環境で開発している。

単なるカンですが状況は2ではないでしょうか?
その場合、クライアントにサーバが発行している証明書を自己署名した証明書をインポートしないと動作しません。
(プラットフォーム依存であるのでそのあたりはお調べください)

おそらくPKIについて、もうすこし調査なされた方が開発にも役立つかと思います。

以上、ご確認ください。
まとはずれでしたらご勘弁を。
うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2005-05-16 23:22
うどです。

サーバ証明証についてあまり詳しくないのですが、
VeriSignで署名がなされているものです。
自己署名ではないと思います。

ちょっとPKIについては調査してみます。

うど
会議室デビュー日: 2003/05/21
投稿数: 10
投稿日時: 2005-05-17 18:29
うどです。

結果報告ですが、無事解決しました。

クライアントとなりうるサーバにルート証明書を登録していましたが、
実際には中間CAにて署名されたものだったのでそっちを
登録したら無事SSL通信できました。

siaさんご協力ありがとうございました。
1

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