webstart-maven-plugin + 無償で正統 ? なコード署名 証明書を入手する方法 久保 裕也  <hiroya@cuc.ac.jp>
自己紹介  ____ <ul><li>なまえ: くぼひろや </li></ul><ul><li>しごと:   オープンソースプログラマ          兼 大学教員 </li></ul><ul><li>JavaOneTokyo2005  Ni...
いいたいこと! <ul><li>みんな、もっと、 デスクトップアプリを書こうよ! </li></ul><ul><li>クライアント側 へのアプリ配布には、 JavaWebStart が最適。 </li></ul><ul><li>JavaWebS...
JavaWebStart 、 つかってますか?  
JavaWebStart  とは? <ul><li>ブラウザ上から、クリックひとつで、 Java アプリを起動させるしくみ 。 </li></ul><ul><ul><li>AIR, ClickOnce  などと類似の技術 </li></ul><...
たとえばこんな感じ <ul><li>http://plat.prof.cuc.ac.jp/~hiroya/sprite/piano.jnlp </li></ul>
JavaWebStart アプリの開発・配置 <ul><li>「配布用ファイル群」を用意する </li></ul><ul><ul><li>メタデータ (JNLP ファイル ) を書く </li></ul></ul><ul><ul><li>Jar...
JavaWebStart のセキュリティ <ul><li>デフォルトでは、 SandBox 内 で動作 </li></ul><ul><li>開発者が、システム資源を、 JNLP API 経由で 獲得するようにプログラムを書けば、 </li></...
「このセキュリティ証明書は、 信頼できる団体によって 発行されています」
ところで。 ちょっと本気の Java プロジェクトでは: <ul><li>依存関係にある jar ファイルの数が、 10 個や 20 個になるくらいのものが、 珍しくない 。 </li></ul><ul><li>net.sqs2:sqs-uti...
<ul><li>開発・設定・署名・配布などなど、 多様な場面・ツール内で、 </li></ul><ul><li>いろいろな jar ファイル への参照を、 膨大な数 で管理しなければならない! </li></ul><ul><ul><li>開発環...
webstart-maven-plugin を、使おう! ここからは、ようやく Maven の話です。
pom.xml  内で、 webstart-maven-plugin を 設定 <ul><li><plugin> </li></ul><ul><li>  <groupId>   org.codehaus.mojo   </groupId>  <...
.jnlp で必要な artifact 名を ひたすら列挙 <ul><li><configuration> </li></ul><ul><ul><li><spec>1.0+</spec> </li></ul></ul><ul><ul><li><...
.jnlp ファイルを生成するための Velocity のテンプレートを指定 <ul><li><jnlp> </li></ul><ul><li><version> 1.0 +</version> </li></ul><ul><li><input...
コード署名のための設定 <ul><li><sign> </li></ul><ul><li>   <keystore>     /home/javajava/verisign.p12 </li></ul><ul><li>   </keystore...
<ul><li>target/jnlp/ の下に、 </li></ul><ul><ul><li>HogeHoge.jnlp ファイル </li></ul></ul><ul><ul><li>そのプロジェクトの artifact の jar ファイ...
    すっげー便利! ということが  わかった人、 拍手してください! ありがとう
「コード署名証明書」、 買ったことありますか? ここで質問.
<ul><li>Verisign 社のコード署名証明書 </li></ul><ul><ul><li>¥  94,500( 税込、 1 年間有効 )  </li></ul></ul><ul><li>GlobalSign 社のコード署名証明書 </...
証明書購入プロセス <ul><li>技術担当者 が,購入内容と購入手順を示した計画書を作成  </li></ul><ul><li>えらいひと が,計画書をもとに購入に GO サインを出す </li></ul><ul><li>事務担当者 が,組織...
「オレオレ証明書」、 使ってますか? ここで質問.
JavaWebStart は、 何らかのコード署名をしないと、 はっきりいって使い物にならない! <ul><li>( 本番の環境なのに )  「 オレオレ証明書 」を作って 使っている例が多い。 Cf.  「高木浩光@自宅の日記」 </li><...
コード署名の「理想」と「現実」 <ul><li>PKI の崇高なる理想、しかし、 </li></ul><ul><li>各種の 「オレオレ証明書」 が氾濫する現実。 </li></ul><ul><li>「オレオレ証明書」の警告を、 ユーザにわざわ...
無償で正統?な コード署名証明書を 入手する方法 ( アンチテーゼとして )  
Thawte  Personal e-mail certificates <ul><li>メアドさえあれば、 誰にでも無料で、 その場ですぐに 、 メール署名用の 証明書 ( PKCS7 ) を発行してくれる。 </li></ul><ul><l...
Javaコンパネの「証明書」画面 デフォルトでは、 Class3 CA と、 Freemail CA が、なぜか 同等の認証機関として設定されている!
 
Thawte Personal Freemail CA は どのように扱うべきか? <ul><li>Sun は、 JRE コンパネの SignerCA/System から、 Thawte Personal Freemail CA のエントリを ...
    ちなみに、 Maven2 のドキュメントには、 こんな記述があります: Maven リポジトリについて… It should be noted that Maven intends to include enhanced support...
    <ul><li>コード署名証明書は、購入も利用も、色々と面倒だけど、 </li></ul><ul><ul><li> ユーザには、なるべく 正しい使い方をさせよう! </li></ul></ul>おわり
参考:元ネタ初出時のURL <ul><li>webstart-maven-plugin </li></ul><ul><ul><li>http://sqs.cmr.sfc.keio.ac.jp/tdiary/20070709.html#p01 <...
おまけ  
JavaWebStart 、 たとえば、 こんなふうに使えます。 本発表者による開発事例 (IPA 未踏「 SQS2.0 の開発」での案件 )
Swing アプリ内部で PDF を生成し、 JNLP API のブラウザ連携機能 で、その PDF を AdobeReader で表示 紙帳票の PDF XHTML + XForms から、 XSLT で、 SVGPrint,FO を作って ...
汎用の ADF (自動紙送り ) 装置付きスキャナで スキャン
たくさん起動しておくと、 自動的に分散並列して 処理が高速化する JavaWebStart で P2P グリッド 紙帳票 ( アンケート用紙) スキャン画像の解析・読み取り
JavaWebStart から 起動させた httpd と で Ajax 紙帳票 ( アンケート用紙)の集計結果を iTunes 的 GUI で 検索・閲覧・修正・データ書き出し GoogleGears 的な仕組みを、自前で実装してみる
「 SQS 」で検索 http:// www.google.co.jp/search?q =SQS ApacheLicenseVer.2 開発者絶賛募集中!
Upcoming SlideShare
Loading in …5
×

webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法

9,357 views

Published on

Maven2を用いてJavaWebStartアプリ開発を行う方法の紹介と、コード署名証明書の取得と運用に関する理想と現実についての考察を示します。

Published in: Technology
  • Be the first to comment

webstart-maven-pugin + 無償で正統?なコード署名証明書を入手する方法

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

×