- PR -

EclipseでJCEのプロバイダが使用できません

1
投稿者投稿内容
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-01-31 16:38
いつもお世話になります。

早速質問なのですが、Java の JCE を利用して暗号を扱うプログラムを開発しているのですが、Eclipse 環境下での実行が上手くいきません。
プログラムの概要は AES と RSA を組み合わせて暗号化したファイルの FTP 送信を行います。
このプログラムを実行すると AES の KeyGenerator のインスタンスを要求する部分で例外がスローされます。
(RSA の KeyPairGenerator は取得できています。)

〔実行コード〕
KeyGenerator generator = KeyGenerator.getInstance("AES");
〔例外〕
NoSuchAlgorithmException: Algorithm AES not available

Security#getProviders()で調べてみても AES の KeyGenerator を提供するプロバイダ (SunJCE) はインストールされています。
インストールされているセキュリティ関係のプロバイダは、優先順位の高い方から以下の5つです。
SUN(1.42),SunJSSE(1.42),SunRsaSign(1.42),SunJCE(1.42),SunJGSS(1.0)
%JAVA_HOME%/jre/lib/security/java.security は初期設定のまま変更していません。

ここが訳の解らない所なのですが、このプログラムを java コマンドで実行すると正常に終了するのでプログラミングのミスではありません。
この結果より、SunJCE を Eclipse が探せていないようなので、プロバイダを指定すると以下の例外がスローされました。

〔実行コード〕
KeyGenerator generator = KeyGenerator.getInstance("AES", "SunJCE");
〔例外〕
NoSuchProviderException: JCE cannot authenticate the provider SunJCE

どうも Eclipse がプロバイダの認証に失敗しているように思えます。
Eclipse の設定を確認したのですが、それらしき項目は見当たりませんでした。

このような現象で悩んでおります。
どのような解決策がありますでしょうか?
また、同じような現象になった方はいらっしゃいますでしょうか?

【環境】
Eclipse Eclipse 2.1.1
JVM Sun J2RE 1.4.2-b28
OS Windows2000 SP4

以上、よろしくお願い致します。

#不適切な表現を訂正しました。

[ メッセージ編集済み 編集者: でゅうく 編集日時 2004-01-31 21:11 ]
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-01-31 23:01
自己解決致しました。

Eclipse の設定で
「インストール済み JRE」⇒「JRE を編集」⇒「デフォルト・システム・ライブラリーの使用」
をチェックしたら解決しました。
何が問題だったのかは理解していませんが・・・。

ただ、当時の状況を再現させようと「デフォルト..の使用」のチェックを外そうとしても外れません。
(チェックは外れるのですが 「OK」 を押下して再度確認するとチェックされています。)

別の質問になってしまいますが、このチェック項目は何の為のものなのでしょうか?
また、何故チェックを外しても設定に反映されないのでしょうか?

ご存知の方、ご教示下さいませ。
プリンス
ベテラン
会議室デビュー日: 2003/07/05
投稿数: 78
お住まい・勤務地: 神奈川
投稿日時: 2004-02-01 09:01
私は英語版のEclipse 2.1.2を使用してますが、ここは複数のJDKを切り替えて使えるようにするための設定画面です。つまり、でゅうくさんのばあい、JDKが一つしか登録されていないため、チェックをはずそうとしてもはずせないわけです。
つまり、ここはチェックボックスではなくラジオボタンである必要があるわけでしょうが、SWTの制約でしょうか?
追加ボタンをクリックして、他のJDKを登録すればチェックがはずせると思います。

unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-02-01 09:26
unibon です。こんにちわ。

引用:

でゅうくさんの書き込み (2004-01-31 16:38) より:
ここが訳の解らない所なのですが、このプログラムを java コマンドで実行すると正常に終了するのでプログラミングのミスではありません。
この結果より、SunJCE を Eclipse が探せていないようなので、プロバイダを指定すると以下の例外がスローされました。


私もセキュリティ API 絡みで、似たこと(JDK のコマンドラインで動くが Eclipse で動かない)が起こったことがあります。
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs17361.html
私の場合は、以前に Eclipse 上で、古いライブラリをやみくもに追加してしまったため、古いライブラリと新しいライブラリの両方が CLASSPATH に指定された状態になっていたことが原因のようでした。
でゅうく
大ベテラン
会議室デビュー日: 2003/11/30
投稿数: 129
投稿日時: 2004-02-01 18:14
ご回答ありがとうございます。

>プリンスさん
使用している Eclipse には、2つの VM が指定してあるのですが、どちらの VM の設定でもチェックは外れないようです。
プリンスさんの回答をヒントに、色々試してみましたところ、「システムライブラリ」として別の JAR を追加した場合に「デフォルト」では無いと判断されるようです。
「デフォルト」では無いと判断されている時は、SunJCE の認証に失敗します。
普段は外部 JAR を追加する際にはプロジェクトのビルドパスでライブラリを追加していたので、まったく気が付きませんでした。
使っているライブラリを認証の対象としている訳ではなく、Eclipse の云う所の「デフォルト」が認証に影響しているように思えます。
Eclipse は、どうやってプロバイダを認証してるんでしょうかね?
なんか、バグっぽいような気もしますが・・・。

>unibon さん
なかなか解り辛い現象ですよね。
この現象について調べ始めて直ぐ unibon さんの書き込みに当たり、大変参考になりました。
原因自体は違っていたかもしれませんが、java コマンドで正常終了することを unibon さんの書き込みで気が付くことが出来ました。
この場を借りてお礼申し上げます。
ありがとうございました。
1

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