- - PR -
Java 6でのSSL通信について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-06-29 18:38
Java 5にて作成したHttpsConnectionを利用し、
httpsのサイトのHTMLのソースを取得するプログラムを Webサービス等の利用を考えJava 6に移行しようと考えております。 Java5では問題なく動作していたのですが、 Java6ではkeytoolで証明書のインストールを行っても動きません。 エラーメッセージは以下の通りです。 アドバイスをお願いいたします。 --------------- javax.net.ssl.SSLException: java.lang.NullPointerException at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at java.net.URL.openStream(Unknown Source) at Sample.Sample.text_actionPerformed(Sample.java:165) at Sample.Sample$1.actionPerformed(Sample.java:57) at javax.swing.JTextField.fireActionPerformed(Unknown Source) at javax.swing.JTextField.postActionEvent(Unknown Source) at javax.swing.JTextField$NotifyAction.actionPerformed(Unknown Source) at javax.swing.SwingUtilities.notifyAction(Unknown Source) at javax.swing.JComponent.processKeyBinding(Unknown Source) at javax.swing.JComponent.processKeyBindings(Unknown Source) at javax.swing.JComponent.processKeyEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) Caused by: java.lang.NullPointerException at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init>(Unknown Source) at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(Unknown Source) at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source) at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) ... 37 more | ||||
|
投稿日時: 2007-06-29 18:50
ちなみに以下のようなプログラムです。
URL url = new URL("https://xxx.com"); File outFile = new File("○○.html"); BufferedImage image = ImageIO.read(url.openStream()); | ||||
|
投稿日時: 2007-06-29 19:11
このSample.javaの165行目というのはどこにあたりますか? | ||||
|
投稿日時: 2007-06-29 19:23
セキュリティ周りでJavaSE 6になって変更があったとアナウンスされているのは以下の通りです。
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/enhancements.html 一番下のふたつはSSLまわりですね。 PKIとかの対応も入っているようなので、何か影響が出ることは十分考えられますね。 | ||||
|
投稿日時: 2007-06-29 19:42
ご返答ありがとうございます。
at Sample.Sample.text_actionPerformed(Sample.java:165) は --------------- BufferedImage image = ImageIO.read(url.openStream()); --------------- の部分です。 Java5ではこれで問題なく実行できたのですが。。 | ||||
|
投稿日時: 2007-06-29 21:08
バージョンアップによる必須設定項目が増えたか、または必須設定をわすれたかが見受けられます。
同じソースを前バージョンで動作見てみましたか? | ||||
|
投稿日時: 2007-07-02 14:46
杏さん
ご返答ありがとうございます。 以前のJava5では問題なく動作することが確認できました。 必須設定項目が増えたのか、そのあたりを追ってみようと思います。 | ||||
|
投稿日時: 2007-07-03 12:00
以下のプログラムでいろいろ試してみたのですが、
Java5で動作するページが Java6では動作しない(先のエラー出力と同じ)ページがあるようです。 どのページに対しても証明書はkeytoolにて登録してあります。 やはり何か設定項目が足りないのでしょうか。。 import java.io.*; import java.net.*; import java.util.*; import javax.net.ssl.*; public class SSLNetCat { public static void main(String[] argv) throws Exception { URI uri = new URI(argv[0]); URLConnection connection = uri.toURL().openConnection(); // ヘッダ情報を出力 Map headers = connection.getHeaderFields(); for (Object key : headers.keySet()) { System.out.println(key + ": " + headers.get(key)); } // SSL情報を出力 HttpsURLConnection sslconnection = (HttpsURLConnection)connection; System.out.println(); System.out.println("符号化方式:" + sslconnection.getCipherSuite()); // コンテンツを出力 BufferedReader reader = new BufferedReader(new InputStreamReader (connection.getInputStream(), "JISAutoDetect")); String buffer = reader.readLine(); System.out.println(); while (null != buffer) { System.out.println(buffer); buffer = reader.readLine(); } } } |
1