Javaのプログラムの配布を、JavaWebStartを利用して配布しようとしてみました。しかし、そこには大きな落とし穴が…。
JavaWebStartは非常に強力なJavaプログラムの配布ツールです。一つJNLPを用意すれば、WindowsだろうがMacだろうがLinuxだろうが、ブラウザからのワンクリックでJavaのプログラムのインストールができてしまいます。もちろん、このJavaのプログラムからはローカルへのファイルアクセスは、バリバリと行うことができます。
まあ、ここまで書いちゃうとある程度推測できると思いますが、つまりセキュリティ的に問題があるわけです。ブラウザからワンクリックしただけで、環境に害を及ぼすことが可能なプログラムを実行してしまう。これだけでは、強力すぎて使えません。
そこで、JavaWebStartにはデジタル署名を検証する機能がついてます。JavaWebStart自身が抱えているデジタル証明書と照らし合わせて、信頼おける認証機関から署名をほどこされている場合には、「信頼できるプログラムみたいですよ」メッセージが出ます。もちろん、署名がいい加減な署名でも、「実行しない方がいいよ」という警告つきで、ユーザーの選択によっては起動させることは可能です。
このあたりは、私個人としては慣れ親しんでたActiveXと同じです。
さて、ここでの問題は、この公的な認証機関からの署名になるのですが、これはコードサイニング署名と呼ばれているモノで、この署名をしてもらおうと思ったら、年間で十万~数十万円もの費用がかかってしまいます。
今回作成した、小さなツールでは、これだけの予算は出ません。
つまり、JavaWebStartなど使わずに各OS毎のインストーラを用意して、インストールして使ってもらわなくてはいけないという事になりました。だって、「オレオレ証明書」なんて使ってたら、信用がた落ちですから。
でも、よく考えてください。インストーラ使ってインストールするプログラムは、同じプログラムなんですよね。しかも、インストーラ使うってことは、インストールするときに管理者権限が必要になるわけで…。セキュリティ的には、不味い方向に向かってる感じがします。でも、こうしないといけない。変な話です。
JavaWebStartに望むこととしては、このプログラムに対する証明書が間違いない手順で送られてきている場合に、このプログラムについてる署名と、その手に入れた証明書の検証を行って、問題がないかを確認する機能を設けて欲しいです。
現在も似たような機能はあるのですが、その証明書を追加する場所が「ルート証明書」なんで、一旦ルート証明書として追加されちゃうと、実は非常にやっかいな問題を証明書の発行側が担わないといけなくなっちゃうんです。それを避けるために、今回はJavaWebStartの利用は止めました。
これじゃ、JavaWebStartが流行るわけありません。こんな落とし穴があるなんて、気付かなかった私もアホですが、このぐらい大きな落とし穴をいつまでもほったらかしにしてたらダメなんじゃないかなぁ…。
まあ、愚痴っぽくて非常に分かり辛い話でした。
Recent Comments