- - PR -
JavaクライアントからのHTTPS接続について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-11-17 09:26
初めての書き込みになります。
どうぞよろしくお願いします。 (至らない点などありましたらご指摘ください) 【環境】 Windows2000 JDK1.4 JavaクライアントからのHTTPS接続において、javax.net.ssl.SSLHandshakeException が出て困っております。 下記コードによりHTTPS接続可能なサイトとSSLHandshakeExceptionが出てしまうサイト (例えばマイクロソフト)があり(IEではいずれも正常に表示できます)、いろいろ 調査したところ、JDK1.4にはIEなどのブラウザにくらべデフォルトでインストールされて いるサーバ証明書が非常にすくないことがわかりました。 ただ、以下の2点についてよくわからず、皆さんのお知恵を拝借させていただければと思います。 ・サーバ証明書の入手方法 ⇒IE右下の鍵マークからエクスポートした.cerファイルでよい? ・JDK1.4へのサーバ証明書のインストール方法 ⇒keytool.exeにより上記.cerファイルをimportしましたがダメでした。 【ソースコード】 public static void main(String[] args) { URL downloadUrl = null; System.setProperty("https.proxyHost", "<プロキシホスト名>"); System.setProperty("https.proxyPort", "<プロキシポート>"); try { downloadUrl = new URL("https://winqual.microsoft.com/signup/"); } catch (MalformedURLException me) { me.printStackTrace(); return; } File localFile = new File("C:\\Work\\temp\\download.txt"); URLConnection con = null; ObjectOutputStream out = null; BufferedInputStream in = null; BufferedOutputStream fout = null; Exception ex = null; try { // URL接続 con = downloadUrl.openConnection(); // キャッシュ無効 con.setUseCaches(false); // URL接続から、データを読み取るバッファリングされた入力ストリームを作成 in = new BufferedInputStream(con.getInputStream()); // データを書き込むバッファリングされた出力ストリームを作成 fout = new BufferedOutputStream(new FileOutputStream(localFile)); // 読み取ったデータを、順次、書き込む byte[] buf = new byte[1024]; int size; while ((size = in.read(buf)) != -1) { fout.write(buf, 0, size); } fout.flush(); } catch (Exception e) { e.printStackTrace(); } finally { out.close(); in.close(); fout.close(); } System.out.println("★終了"); } 【実行結果】 javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Could not find trusted certificate at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA6275) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA6275) at sun.net.www.protocol.https.HttpsClient.afterConnect(DashoA6275) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(DashoA6275) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:574) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(DashoA6275) at Test.main(Test.java:61) Caused by: java.security.cert.CertificateException: Could not find trusted certificate at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.a(DashoA6275) at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(DashoA6275) at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(DashoA6275) ... 11 more ★終了 よろしくお願いします。m(__)m [ メッセージ編集済み 編集者: サビオラ 編集日時 2003-11-17 09:28 ] [ メッセージ編集済み 編集者: サビオラ 編集日時 2003-11-18 16:52 ] |
|
投稿日時: 2004-07-08 16:29
サビオラさん、もう既に解決してしまいました?
私も同じ問題に遭遇して、このスレッドを見つけたんですが、解答がなくてちょっとがっかり。 でも、以下の情報を発見し、なんとか解決しました。 http://www.ctct.co.jp/tsd/sdb/java_verisign_sun_install.html 要は、ルート証明書をインポートしないといけない、ということでしょうか? それではご参考まで。 [ メッセージ編集済み 編集者: たけはし 編集日時 2004-07-08 16:34 ] |
1