390 likes | 565 Views
webstart-maven-plugin + 無償で正統 ? なコード署名 証明書を入手する方法. 久保 裕也 <hiroya@cuc.ac.jp>. 自己紹介 ____. なまえ: くぼひろや しごと: オープンソースプログラマ 兼 大学教員 JavaOneTokyo2005 Night for Java Tech 出場 IPA 未踏ソフト 2007 年 I 期採択者 採択テーマ:「 SQS2.0 の開発」. いいたいこと!. みんな、もっと、 デスクトップアプリを書こうよ!
E N D
webstart-maven-plugin+無償で正統?なコード署名証明書を入手する方法webstart-maven-plugin+無償で正統?なコード署名証明書を入手する方法 久保 裕也 <hiroya@cuc.ac.jp>
自己紹介 ____ • なまえ: くぼひろや • しごと:オープンソースプログラマ 兼 大学教員 • JavaOneTokyo2005 Night for Java Tech出場 • IPA未踏ソフト2007年I期採択者 • 採択テーマ:「SQS2.0の開発」
いいたいこと! • みんな、もっと、デスクトップアプリを書こうよ! • クライアント側へのアプリ配布には、JavaWebStartが最適。 • JavaWebStartでの開発には、Maven2が便利だよ!
JavaWebStart とは? • ブラウザ上から、クリックひとつで、Javaアプリを起動させるしくみ。 • AIR, ClickOnce などと類似の技術 • オフラインでの起動も可能。 • オンラインなら最新バージョンへの更新も簡単。
たとえばこんな感じ • http://plat.prof.cuc.ac.jp/~hiroya/sprite/piano.jnlp
JavaWebStartアプリの開発・配置 • 「配布用ファイル群」を用意する • メタデータ(JNLPファイル)を書く • Jarファイルをパックする(Jarファイルに署名する) • 「配布用ファイル群」をWebサーバ上に配置する
JavaWebStartのセキュリティ • デフォルトでは、SandBox内で動作 • 開発者が、システム資源を、JNLP API経由で獲得するようにプログラムを書けば、 ユーザが、システム資源を、逐次的・明示的に許可することで、ローカルファイルの読み書き等が可能に • 開発者/配布者が、すべてのJarにコード署名をし、ユーザが、初回起動時に許可をすれば、SandBox外で動作させることも可
「このセキュリティ証明書は、信頼できる団体によって発行されています」「このセキュリティ証明書は、信頼できる団体によって発行されています」
依存関係にあるjarファイルの数が、10個や20個になるくらいのものが、珍しくない。依存関係にあるjarファイルの数が、10個や20個になるくらいのものが、珍しくない。 net.sqs2:sqs-util org.mortbay.jetty:jetty org.mortbay.jetty:jetty-util org.mortbay.jetty:servlet-api-2.5 xalan:xalan xerces:xercesImpl velocity:velocity oro:oro batik:batik-awt-util com.lowagie:itext net.sf.ehcache:ehcache org.apache.poi:poi commons-collections:commons-collections commons-httpclient:commons-httpclient commons-logging:commons-logging commons-lang:commons-lang commons-codec:commons-codec commons-digester:commons-digester commons-beanutils:commons-beanutils commons-io:commons-io net.sourceforge.collections:collections-generic xnap-commons:xnap-commons gettext-commons:gettext-commons jfree:jfreechart jfree:jcommon ところで。ちょっと本気のJavaプロジェクトでは:
というわけで、色々と面倒くさい! • 開発・設定・署名・配布などなど、多様な場面・ツール内で、 いろいろなjarファイルへの参照を、膨大な数で管理しなければならない! • 開発環境で、jarファイルを設定…… • JNLPファイルで、jarファイルを設定…… • antでコード署名をするためにbuild.xml内でjarファイルを設定…… …特に、コード署名が、面倒くさい!
webstart-maven-plugin を、使おう! ここからは、ようやくMavenの話です。
pom.xml 内で、webstart-maven-pluginを設定 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>webstart-maven-plugin </artifactId>
<configuration> <spec>1.0+</spec> <dependencies> <includes> <include>org.mortbay.jetty:jetty</include> <include>org.mortbay.jetty:jetty-util</include> <include>org.mortbay.jetty:servlet-api-2.5</include> <include>xalan:xalan</include> <include>xerces:xercesImpl</include> <include>batik:batik-awt-util</include> <include>org.apache.poi:poi</include> <include>commons-httpclient:commons-httpclient</include> <include>commons-logging:commons-logging</include> <include>commons-lang:commons-lang</include> <include>commons-codec:commons-codec</include> <include>commons-digester:commons-digester</include> <include>commons-beanutils:commons-beanutils</include> <include>commons-io:commons-io</include> .jnlpで必要なartifact名をひたすら列挙 これらのartifact群で、JWSアプリの構成を指定するよ。
<jnlp> <version>1.0+</version> <inputTemplate> src/jnlp/jnlp.vm </inputTemplate> <outputFile> HogeHoge.jnlp </outputFile> <mainClass> com.example.foo.bar.MainClass </mainClass> </jnlp> .jnlpファイルを生成するためのVelocityのテンプレートを指定 .vmで${dependencies}と書いておけば、pom.xmlの<dependencies>要素以下をもとに、 <jar>要素群を自動埋め込みするよ!
<sign> <keystore>/home/javajava/verisign.p12 </keystore> <keypass /> <storepass>xxxxxxxx</storepass> <storetype>pkcs12</storetype> <alias> example.com's verisign, inc. id </alias> <verify>false</verify> </sign> コード署名のための設定 ここで指定した鍵ストア・aliasで、 .jarファイル群を自動的に署名するよ
target/jnlp/の下に、 HogeHoge.jnlpファイル そのプロジェクトのartifactのjarファイル 依存artifactのjarファイルその1 依存artifactのjarファイルその2 依存artifactのjarファイルその3… を、作成する。 これら全部が、mvn install 一発で完成!
すっげー便利!ということが わかった人、拍手してください! ありがとう
「コード署名証明書」、買ったことありますか?「コード署名証明書」、買ったことありますか? ここで質問.
コード署名証明書の費用 • Verisign社のコード署名証明書 • ¥ 94,500(税込、1年間有効) • GlobalSign社のコード署名証明書 • ¥ 39,900(キャンペーン価格;-,税込、1年間有効) 毎年の更新時に、「組織の実在性確認」「申請の意思確認」を受けなければならない.
証明書購入プロセス • 技術担当者が,購入内容と購入手順を示した計画書を作成 • えらいひとが,計画書をもとに購入にGOサインを出す • 事務担当者が,組織の存在証明に必要な書類一式を揃えて認証局に郵送 • 技術担当者が,Webなどを通じて「コード署名証明書」の発行を認証局に依頼 • 会計担当者が,金融機関を通じて購入手続きを行なう • えらいひとが,認証局からの電話連絡に答えて存在証明をする • 技術担当者が,Webを通じて「コード署名証明書」を取得 • 技術担当者が,「コード署名証明書」を用いて署名作業を行なう これを毎年アレンジするのは、正直、ものすごーく面倒くさい!!! (とくに、えらいひと関連…)
「オレオレ証明書」、使ってますか? ここで質問.
JavaWebStartは、何らかのコード署名をしないと、はっきりいって使い物にならない!JavaWebStartは、何らかのコード署名をしないと、はっきりいって使い物にならない! • (本番の環境なのに) 「オレオレ証明書」を作って使っている例が多い。Cf. 「高木浩光@自宅の日記」 • http://takagi-hiromitsu.jp/diary/ • これに対し、Sun JREは、わりと激しい文面で、「オレオレ証明書だから起動をしないように!」という意味の警告表示をしてくる。
コード署名の「理想」と「現実」 • PKIの崇高なる理想、しかし、 • 各種の「オレオレ証明書」が氾濫する現実。 • 「オレオレ証明書」の警告を、ユーザにわざわざ無視させるような、危険な操作マニュアルが、まかり通っている。
無償で正統?なコード署名証明書を入手する方法(アンチテーゼとして)無償で正統?なコード署名証明書を入手する方法(アンチテーゼとして)
Thawte Personal e-mail certificates メアドさえあれば、誰にでも無料で、その場ですぐに、メール署名用の証明書(PKCS7)を発行してくれる。 この証明書は、jarsignerでのコード署名にも使える。 http://www.thawte.com/
Javaコンパネの「証明書」画面 デフォルトでは、Class3 CAと、Freemail CAが、なぜか同等の認証機関として設定されている!
Thawte Personal Freemail CAはどのように扱うべきか? • Sunは、JREコンパネのSignerCA/Systemから、Thawte Personal Freemail CAのエントリを削除すべきではないのか? • (Sunがどうするかはともかくとして、)ユーザは、こういう怪しいCAを自分の判断でRemoveする能力を持つべき。 • 開発者/配布者は、「オレオレ証明書」を本番で使ってはいけない!
ちなみに、Maven2のドキュメントには、こんな記述があります:ちなみに、Maven2のドキュメントには、こんな記述があります: Mavenリポジトリについて… It should be noted that Maven intends to include enhanced support for such features in the future, including click through licenses on downloading, and verification of signatures. http://maven.apache.org/guides/introduction/introduction-to-repositories.html「Mavenでは、ダウンロード時のクリックスルーライセンスや署名の確認を含む機能拡張を行う予定がある」(Maven翻訳サブプロジェクト訳)
コード署名証明書は、購入も利用も、色々と面倒だけど、コード署名証明書は、購入も利用も、色々と面倒だけど、 ユーザには、なるべく正しい使い方をさせよう! おわり
参考:元ネタ初出時のURL • webstart-maven-plugin • http://sqs.cmr.sfc.keio.ac.jp/tdiary/20070709.html#p01 • 無償で正統的なコード署名証明書を入手する方法 http://sqs.cmr.sfc.keio.ac.jp/tdiary/20051003.html
JavaWebStart、たとえば、こんなふうに使えます。JavaWebStart、たとえば、こんなふうに使えます。 本発表者による開発事例 (IPA未踏「SQS2.0の開発」での案件)
Swingアプリ内部でPDFを生成し、JNLP APIのブラウザ連携機能で、そのPDFをAdobeReaderで表示 アウトライン編集型XMLエディタ 紙帳票のPDF XHTML+XFormsから、XSLTで、SVGPrint,FOを作って 紙帳票(アンケート用紙)を印刷
汎用のADF(自動紙送り)装置付きスキャナでスキャン汎用のADF(自動紙送り)装置付きスキャナでスキャン
JavaWebStartでP2Pグリッド たくさん起動しておくと、自動的に分散並列して処理が高速化する 紙帳票(アンケート用紙)スキャン画像の解析・読み取り
JavaWebStartから起動させたhttpdとでAjax GoogleGears的な仕組みを、自前で実装してみる 紙帳票(アンケート用紙)の集計結果をiTunes的GUIで検索・閲覧・修正・データ書き出し
「SQS」で検索http://www.google.co.jp/search?q=SQS ApacheLicenseVer.2開発者絶賛募集中!