- PR -

SSL Exception

投稿者投稿内容
sachi
会議室デビュー日: 2004/10/25
投稿数: 8
投稿日時: 2004-10-25 17:08
初めての投稿です。宜しくお願いいたします。
下記のエラーが発生していて、どのように対応したらいいのかわからず困っています。
アドバイスください。宜しくお願いいたします。

環境は
Java→
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
で行っています。
記載しているソース →

System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
strurl = "https://www--------------";
URL url = new URL(strurl);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("User-Agent", "@IT java-tips URLConnection");
conn.setRequestProperty("Accept-Language", "ja");
BufferedReader in =
new BufferedReader( new InputStreamReader( conn.getInputStream()));

ここでエラーが発生します。
javax.net.ssl.SSLException: untrusted server cert chain



[ メッセージ編集済み 編集者: さち 編集日時 2004-10-25 17:14 ]
ponkotu
会議室デビュー日: 2004/09/30
投稿数: 4
投稿日時: 2004-10-25 19:43
「untrusted server cert chain」
上記の英文を意訳すると、信頼できないサーバーのCERT鍵です。となります。
http://jp.sun.com/supportraining/letter122503.html ←は大丈夫でしょうか?
独自鍵の場合、有効期間の設定は大丈夫(期限内)でしょうか?
確認をしてみて下さい。

詳しいことは、google検索でお願いします。

以上
mamakin
会議室デビュー日: 2004/10/22
投稿数: 7
投稿日時: 2004-10-26 10:56
HTTPSへの接続の場合、
javax.net.ssl.HttpsURLConnection
を使うとよいのでは。

他のスレッドにもありました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=7497
sachi
会議室デビュー日: 2004/10/25
投稿数: 8
投稿日時: 2004-10-27 12:38
>ponkotuさん
有効期限は大丈夫でした。
Valid from: Mon Jan 29 09:00:00 JST 1996 until: Wed Aug 02 08:59:59 JST 2028

ホッシー
会議室デビュー日: 2004/10/22
投稿数: 13
投稿日時: 2004-10-27 14:12
引用:

sachiさんの書き込み (2004-10-27 12:38) より:
>ponkotuさん
有効期限は大丈夫でした。
Valid from: Mon Jan 29 09:00:00 JST 1996 until: Wed Aug 02 08:59:59 JST 2028



これから察すると、独自認証局を立てて、そこで発行した証明書をWebサーバはつかってますね。

ということは、クライアントは発行した認証局を信頼していないことが原因かもしれません。
クライアントは通常信頼できないところから発行された証明書を使った処理を行う場合、通信できなくなったり、警告をだしたり(IEなど)します。

そこで少し考えると、Verisignなど認証機関が発行した証明書では、
なぜ無条件に通信できるのかということにぶち当たるかと思いますが、
これは、IEやJDKでは、Verisignのルート証明書を信頼しているからです。
(おおざっぱですが・・・)

では、どうすればよいのかというと、問題となっている証明書だけを信頼させればよいので、下記のスレッドを参考にしてみてください。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15914&forum=12&4
sachi
会議室デビュー日: 2004/10/25
投稿数: 8
投稿日時: 2004-10-27 15:08
引用:

ホッシーさんの書き込み (2004-10-27 14:12) より:
ありがとうございます。下のURLを参照して、
接続先から提供されているセキュリティー証明書をimportしました。
keytool -import -keystore /JAVA_HOME/jre/lib/security/cacerts -file /PATH_TO_CER/xxx.cer -alias cacerts -trustcacerts

java.security.NoSuchAlgorithmException: MD5WITHRSA Signature not
available

Exceptionが発生しました。
APIでは、「この例外は、ある暗号アルゴリズムが要求されたにもかかわらず、現在の環境では使用可能でない場合にスローされます。」このように記載されているのですが、実際どのように対応したらいいのかつまってしまいました。
ご教授ください。宜しくお願いいたします。

引用:

sachiさんの書き込み (2004-10-27 12:38) より:
>ponkotuさん
有効期限は大丈夫でした。
Valid from: Mon Jan 29 09:00:00 JST 1996 until: Wed Aug 02 08:59:59 JST 2028



これから察すると、独自認証局を立てて、そこで発行した証明書をWebサーバはつかってますね。

ということは、クライアントは発行した認証局を信頼していないことが原因かもしれません。
クライアントは通常信頼できないところから発行された証明書を使った処理を行う場合、通信できなくなったり、警告をだしたり(IEなど)します。

そこで少し考えると、Verisignなど認証機関が発行した証明書では、
なぜ無条件に通信できるのかということにぶち当たるかと思いますが、
これは、IEやJDKでは、Verisignのルート証明書を信頼しているからです。
(おおざっぱですが・・・)

では、どうすればよいのかというと、問題となっている証明書だけを信頼させればよいので、下記のスレッドを参考にしてみてください。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15914&forum=12&4


ponkotu
会議室デビュー日: 2004/09/30
投稿数: 4
投稿日時: 2004-10-28 10:24
引用:

java.security.NoSuchAlgorithmException: MD5WITHRSA Signature not available
Exceptionが発生しました。
APIでは、「この例外は、ある暗号アルゴリズムが要求されたにもかかわらず、現在の環境では使用可能でない場合にスローされます。」



例外の内容から推測すると、プロバイダーがMD5に対応していないのではないでしょうか。
ソースコードに以下のコードが存在しなければ追加してみてください。
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

以上
sachi
会議室デビュー日: 2004/10/25
投稿数: 8
投稿日時: 2004-10-28 12:05
引用:

ponkotuさんの書き込み (2004-10-28 10:24) より:
引用:

java.security.NoSuchAlgorithmException: MD5WITHRSA Signature not available
Exceptionが発生しました。
APIでは、「この例外は、ある暗号アルゴリズムが要求されたにもかかわらず、現在の環境では使用可能でない場合にスローされます。」



例外の内容から推測すると、プロバイダーがMD5に対応していないのではないでしょうか。
ソースコードに以下のコードが存在しなければ追加してみてください。
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

以上


ありがとうございます。
上記ソースを記載し、実行させましたが、

javax.net.ssl.SSLException: untrusted server cert chain
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA6275)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.a(DashoA6275)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(DashoA6275)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(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.AppOutputStream.write(DashoA6275)
at java.io.OutputStream.write(OutputStream.java:58)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA6275)
このようにエラーが発生しました。

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