Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JRE1.7でのセキュリティ無効化について教えてください

はじめまして。
ヒトミと申します。
よろしくお願いします。


JRE1.6まで動いていたアプリケーションが、JRE1.7で動かなくなってしまいました。


Javaアプレットからローカルのテキストファイルを読み込む、また、exeを実行するアプリケーションがあります。

セキュリティを無効にするため、.java.policyファイルをユーザのホームディレクトリに置いています。
.java.policyファイルの内容は、つぎの通りです。

grant codeBase "http://省略/*" {
    permission java.security.AllPermission;
};

Java1.1〜1.2の時代に作られた古いアプリケーションですが、JRE1.6までは動作していました。
JRE1.7で動かしたところ、BufferedReader br = new BufferedReader( new FileReader(fileName) ); のところで
java.security.AccessControlException になってしまいました。


今回動作させたい環境は、Windows7(64ビット) + Internet Explorer8(32ビット)です。
.java.policyファイルは、C:\Users\<ユーザー名>\.java.policyに置いています。
このパスは、Javaコンソールに表示される「ユーザのホームディレクトリ」と同じなので間違いは無いと思っています。


また、試しに、C:\Program Files (x86)\Java\jre7\lib\security にあるjava.policyファイルに先ほどの、
grant codeBase〜を追加してみたところ期待通りの動作を得ることができました。
ですが、これまでの様にホームディレクトリに置く類の方法で動作させたいです。


.java.policyファイルを置く場所や、記述しなければならない内容が変わったりしたのでしょうか?
解決方法をご存知の方がいらしたら、ご教授の程 よろしくお願いします。

5

回答

14024

閲覧

5件の回答

評価

0

Javaの実行時引数を調べてみる。

評価

0

質問者です。

ご回答ありがとうございます。
ヒントを手がかりに調べていたところjava.securityにポリシーファイルの指定があることが分かりました。

java.securityの内容は、つぎの通りになっていて問題無い様に思えます。
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy


そこで色々試してみました。

1.環境変数を使わずに記述したものを追加
  結果===動作しました
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3=file://C:/Users/<ユーザー名>/.java.policy

2.別名のポリシーファイルを用意
  結果===動作しました
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3=file:${user.home}/.test.policy

3.ファイルの内容を疑い、.test.policyを.java.policyにリネームしてみた
  結果===動作しませんでした
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

4.3行目に2行目と同じ設定を追加
  結果===動作しました(何故?)
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3=file:${user.home}/.java.policy


ここまでは、1.7.0.u45で検証していたのですが、1.7.0.u21にバージョンダウンしてみたところデフォルトのjava.securityで動作してしまいました。
u45のバグなのでしょうか? 今回はu21で動作すれば構わないので、とりあえず解決と致します。


ちなみに、Javaアプリケーションの実行時引数にポリシーファイルを指定する方法(-Djava.security.policy=)があるので試してみたかったですが、アプレットで指定する方法は分かりませんでした。

評価

0

アプレットのVM引数は、java_argumentsという固定の
パラメータみたいね。試してないけど。

評価

70

セキュリティ上、Java SE 7 u45以降、file:${user.home}/.java.policy をデフォルトでは使用しないようになりました。

これは、Java Plug-inのプロパティ
deployment.security.use.user.home.java.policy
がデフォルトでfalseになったためです。

このプロパティをtrueに設定すれば従来と同じ動きをするようになると思います。ユーザー固有に設定する場合と、システム全体に設定する場合とで記述する設定ファイルが変わります。

ユーザー固有の設定ファイルはWindows OSの場合
%USERPROFILE%\AppData\LocalLow\Sun\Java\Deployment\deployment.properties

システム共通の設定ファイルは
<JREインストールディレクトリ>\lib\security\java.policy

です。

ただし、今後のJava SE 7アップデート(2014-01のJava SE 7u51)で、アプレットとJava Web Startの実行には電子署名が必要になる等のさらなるセキュリティの強化が予定されています。上述の回避策が7u51以降で有効かどうかは分かりません。




評価

0


今日は超嬉しかった!!通信販売で素敵な名ブランドバックを購入した。価額は1万円ぐらいしか使っていなかった。代金を支払って、5日後商品が着きました。
鞄の質がとてもいいですね。私は大変好きです。
この店にの商品は市場のと比べると、価格が安いですよ。
では、この店のウェブサイトを皆に教えます。
www.roiexjp.biz皆速く買いに行ってくださいね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。