- PR -

Java 6でのSSL通信について

1
投稿者投稿内容
デュオ
会議室デビュー日: 2007/06/29
投稿数: 5
投稿日時: 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
投稿数: 5
投稿日時: 2007-06-29 18:50
ちなみに以下のようなプログラムです。

URL url = new URL("https://xxx.com");
File outFile = new File("○○.html");
BufferedImage image = ImageIO.read(url.openStream());
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-29 19:11
引用:

at Sample.Sample.text_actionPerformed(Sample.java:165)


このSample.javaの165行目というのはどこにあたりますか?
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 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
投稿数: 5
投稿日時: 2007-06-29 19:42
ご返答ありがとうございます。

at Sample.Sample.text_actionPerformed(Sample.java:165) は
---------------
BufferedImage image = ImageIO.read(url.openStream());
---------------
の部分です。
Java5ではこれで問題なく実行できたのですが。。
朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-29 21:08
バージョンアップによる必須設定項目が増えたか、または必須設定をわすれたかが見受けられます。
同じソースを前バージョンで動作見てみましたか?
デュオ
会議室デビュー日: 2007/06/29
投稿数: 5
投稿日時: 2007-07-02 14:46
杏さん
ご返答ありがとうございます。

以前のJava5では問題なく動作することが確認できました。
必須設定項目が増えたのか、そのあたりを追ってみようと思います。
デュオ
会議室デビュー日: 2007/06/29
投稿数: 5
投稿日時: 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

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