Javaと時代の流れ

Java 7u10 以後からは、信頼できないJavaアプリケーションがWebページに含まれている場合に次のようなメッセージが出るようである。これが自分で作ったプログラムをローカルで実行する場合にも出ることにはやや驚いた。
NOTE
1) 不明な発行者によってデジタル署名されているアプリケーション、信頼できる認証局によって発行されていない証明書のついたアプリケーションなど。



「エラー」をクリックすると次のようなものが出る。


これは現在のJavaのセキュリティレベルが高く設定されているために、以前は普通に動作したJava Appletでも、今ではそのままでは動作しなくなったということのようである。

これはJavaコントロール・パネル(javacpl.exe2))を実行してみると、デフォルトでは次のようになっている。
NOTE
2) エクスプローラから直接クリックして実行する。
C:\Users\Editor\Java\jre\bin\javacpl.exe または C:\Program Files (x86)\Java\jre7\bin\javacpl.exe にある。どちらも同じものである。


当面の動作確認のために、実行してみるには次のようにするしかないようである。
セキュリティレベルをいちばんゆるい「中」にする。


それで実行してみると、今度は次のようなメッセージが出る。


これで「実行(R)」にすると、以前と同じように実行できる。
Javaのプログラム自体はバージョンが変わっても実行できるということである。ただ、セキュリティレベルが高く設定されたという面で実行ができないということである。



さて、以前に作ったプログラムは全部正常に動作した。動作確認したらセキュリティレベルを元に戻しておく。それから後は、このバージョンでも実行できるようにセキュリティ問題をクリアすればよいだけになる。


セキュリティ・レベル

Javaアプレット(またはアプリケーション)は実行できるか実行できないかになる。
  1. 信頼できないjavaアプリケーションを実行する前にプロンプトが表示される(結局は実行できる)。
  2. 信頼できないJavaアプリケーションがブロックされ実行できない。

このレベルの差異はオラクル(ORACLE)によると次のようである。
  1. 非常に高
    最も厳しいセキュリティ・レベル。
    署名されていないおよび自身で署名したアプレットおよびアプリケーションはブロックされ実行されない。
    プロンプトが表示された後、信頼できる認証局の関連付けられた証明書を持つアプリケーションだけが実行される。


  2. デフォルトのセキュリティ設定。
    署名されていないおよび自身で署名したサンドボックス(アクセス制限)・アプリケーションは、古いまたは期限が切れているJavaバージョンで実行されない。
    すべてのアプレットを実行する前にセキュリティ・プロンプトが表示される。


  3. セキュリティ・プロンプトが表示された後でのみ、すべてのアプレットが実行される。
    中のセキュリティ・レベルの選択は非推奨。不正なアプリケーションを実行するとコンピュータがより脆弱になる危険がある。
インターネットの接続を切って、ローカルで使う分には「中」でも別に問題はないということになる。しかし、このままでインターネットに接続していくと、いつどこで不正なプログラムの不意打ちに会うかもしれないという危険が出てくる。

ただし、「中」にしていても「セキュリティプロンプト」「セキュリティ警告」で「取消」という最後の「拒否権」は使えそうである。WEBではこの「取消」を使うことによって危険を回避できそうだともいえる。


さてどうする

最近のJavaではローカルで実行するアプレットの場合であってもコード証明書が必須となるようである。以前は、ローカルで実行するJavaアプレットは何の警告も無く動作していた。
しかし、それが逆にJavaの脆弱性になり、そこを狙った悪質なアプリが増加してきたことが背景にある。

PerlやPHPはサーバーサイドのスクリプトである(ローカルでは実行されない)。それに対して、Javaはクラスファイル(*.class)という準実行型ファイルをダウンロードしてWEBまたはローカルで実行する。そのファイルさえダウンロードさせれば、あとは何でもやりたい放題になる。

ブラウザを使ってWEB上のページだけで実行するときのチェックだけを厳しくしても意味はない。ローカルでも同程度のチェックをしなければならない。そういう考慮によるものであろうと思われる。

こうなると、ローカルでJavaを自分のパソコンのユーティリティ程度に手軽に使おうとすることができなくなってしまう。セキュリティの強化は時代の流れとはいえ不便になったものである。

セキュリティレベルを「中」にしても、WEBでは「セキュリティ警告」が出たときに常に「取消」にすれば問題はないことになるが、それを知らない他人がこのパソコンでWEBにアクセスして「実行」してしまうという危険は残る。また、その危険なプログラムはローカルのどこかに取り込まれているというのも気味が悪い。げに安全と不便は表裏一体である。

なお、以上のこまごまとしたセキュリティ制限うんぬんはブラウザ内で実行するJavaアプレットだけに対するものである。すなわち、*.htmlファイルから呼び出すプログラムだけに対するもののようである。

Javaで作るWindowプログラムやコマンドラインで実行するJavaプログラムにはそんな制限はないようである。当面はこれで使うとするか。しかし、ユーティリティ程度のものを作っても、ローカルの*.htmlで手軽に使うことができないのは致命的である。その使用(利用)範囲は激減するだろう。


問題なく実行できる場合


Javaで作るWindowプログラムやコマンドラインで実行するJavaプログラム。
こういうプログラムはセキュリティ制限とは無関係に実行できる。

- 2013/07/24 -


参考
自動アップデートの功罪/中レベルはどこへ/中レベルを使うにはどうする(tpc_0221)