- - PR -
httpsサイトへデータ送信について
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-02 20:26
>itkmh さん
返信、ありがとうございます。 参考のURLを拝見してました。そして、 「java -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol」 で実行すると、ClassCastのエラーは回避されました。 ただし、 >url.openConnection()の戻り値をSystem.out.println で確認したところ、 「sun.net.www.protocol.https.DelegateHttpsURLConnection:https://www.xxxx/cgi-bin/test.cgi」となりました。 そして、今度は次のエラーが発生しました。 「javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Could not find trusted certificate」 よろしくお願いします。 |
|
投稿日時: 2005-05-02 21:07
未記入さん、
念のためですが、テストサーバ側は HTTPSに対応している のですね? |
|
投稿日時: 2005-05-02 21:09
つばさです。
JDK1.3でSSL(通信経路を暗号化する目的のみで)通信を行ったときの手順を 示します。(かなり昔の事なので役にたつかどうかは?ですが)参考までに。 ○JSSEのjarを%JAVA_HOME%\\jre\\lib\\extにコピーします。(以下の3つ) ・jcert.jar ・jnet.jar ・jsse.jar ○JREのセキュリティプロバイダの設定を追加します。 %JAVA_HOME%\\jre\\lib\\security\\java.securtiyをエディタで開き security.provider.3=com.sun.net.ssl.internal.ssl.Provider を追加します。 ○HTTPSで通信を行うJavaプログラムの引数に -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol を追加します。 ○相手先のサーバの証明書をインポートする。 相手先のサーバ証明書がserver.certとして適当なフォルダにコピーします。 keytool -import -keystore jssecacerts -file server.cert Enter keystore password: →yes Trust this certificate? [no]: →yes ここで、jssecacertsが作成されるので、これを %JAVA_HOME%\\jre\\lib\\securityにコピーします。 これで、http→httpsに変更すれば、SSLでの通信が行われます。 また、SSLのハンドシェイクを確認したいときは、-Djava.net.debug=all を指定すれば、やりとりがわかるので解決の糸口になります。 |
|
投稿日時: 2005-05-09 15:31
コメントが遅くなりましたが。。。
Kissinger、つばささん、返信ありがとうございました。 >Kissingerさん 当初、SSLの証明のないサーバでテストしていたのですが、 現在は、SSL証明のあるサーバでテストしています。 >つばささん おかげさまで、かなり進むことができました! それと、「-Djava.net.debug=all」も設定して いるのですが、これといったログがでません。 エラー時のみ何かログが出るものなのでしょうか?? それから、次なる問題が発生しています。 現在、以下の部分で通信が固まってしまい、先へ 進みません。 OutputStream os = XX.getOutputStream(); Javaの問題というよりは、ネットワーク設定の問題と 思うのですが、何かご存知の方がいらっしゃれば、 ご教授ください。 |
|
投稿日時: 2005-05-09 22:23
つばさです。
すみません。-Djava.net.debug=allは、アプレットのお話でした。 うそをついて、混乱させてしまったことをお詫びします。 ネットワークモニタなどで通信のダンプをみてください。 ちょっとTomcat5.0.30とJDK1.3.1_15で試してみました。 (以下のソース) --------- URL helloURL = new URL("https://localhost"); URLConnection con = helloURL.openConnection(); con.setDoOutput(true); PrintWriter out = new PrintWriter(con.getOutputStream()); out.print("msg=Hello+World"); out.close(); BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } in.close(); -------- こちらでは、問題なくSSLで通信できます。 getOutputStream()で固まるのは、ちょっとわかりかねます。 (ネットワークモニタでパケットを確認されてはいかがでしょうか) |