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

Download Report

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

webstart-maven-plugin
+
無償で正統?なコード署名
証明書を入手する方法
久保 裕也
<[email protected]>
自己紹介 ____
►なまえ:
くぼひろや
►しごと:
オープンソースプログラマ
兼 大学教員
► JavaOneTokyo2005 Night for Java Tech出場
► IPA未踏ソフト2007年I期採択者
 採択テーマ:「SQS2.0の開発」
いいたいこと!
►みんな、もっと、
デスクトップアプリを書こうよ!
►クライアント側へのアプリ配布には、
JavaWebStartが最適。
►JavaWebStartでの開発には、
Maven2が便利だよ!
JavaWebStart、
つかってますか?
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外で動作させることも可
「このセキュリティ証明書は、
信頼できる団体によって
発行されています」
ところで。
ちょっと本気のJavaプロジェクトでは:
依存関係にある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
► 開発・設定・署名・配布などなど、
多様な場面・ツール内で、
いろいろな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>
.jnlpで必要なartifact名を
ひたすら列挙
<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>
これらの
artifact群で、
JWSアプリの
構成を指定するよ。
.jnlpファイルを生成するための
Velocityのテンプレートを指定
<jnlp>
<version>1.0+</version>
<inputTemplate>
src/jnlp/jnlp.vm
</inputTemplate>
<outputFile>
HogeHoge.jnlp
</outputFile>
.vmで${dependencies}
と書いておけば、
pom.xmlの
<dependencies>
要素以下をもとに、
<jar>要素群を
自動埋め込みするよ!
<mainClass>
com.example.foo.bar.MainClass
</mainClass>
</jnlp>
コード署名のための設定
<sign>
<keystore>
/home/javajava/verisign.p12
</keystore>
ここで指定した
<keypass />
鍵ストア・aliasで、
<storepass>xxxxxxxx</storepass>
.jarファイル群を
<storetype>pkcs12</storetype>
自動的に署名するよ
<alias>
example.com's verisign, inc. id
</alias>
<verify>false</verify>
</sign>
►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は、
何らかのコード署名をしないと、
はっきりいって使い物にならない!
► (本番の環境なのに)
「オレオレ証明書」を作って
使っている例が多い。
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のドキュメントには、
こんな記述があります:
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/200707
09.html#p01
► 無償で正統的なコード署名証明書を入手する
方法
http://sqs.cmr.sfc.keio.ac.jp/tdiary/2
0051003.html
おまけ
JavaWebStart、
たとえば、
こんなふうに使えます。
本発表者による開発事例
(IPA未踏「SQS2.0の開発」での案件)
Swingアプリ内部でPDFを生成し、
JNLP APIのブラウザ連携機能
で、そのPDFをAdobeReaderで
表示
アウトライン編集型
XMLエディタ
紙帳票のPDF
XHTML+XFormsから、XSLTで、SVGPrint,FOを作って
紙帳票(アンケート用紙)を印刷
汎用の
ADF(自動紙送り)
装置付きスキャナで
スキャン
JavaWebStartで
P2Pグリッド
たくさん起動しておくと、
自動的に分散並列して
処理が高速化する
紙帳票(アンケート用紙)
スキャン画像の解析・読み取り
JavaWebStartから
起動させたhttpdと
でAjax
GoogleGears的な仕組みを、自前で実装してみる
紙帳票(アンケート用紙)の集計結果を
iTunes的GUIで
検索・閲覧・修正・データ書き出し
「SQS」で検索
http://www.google.co.jp/
search?q=SQS
ApacheLicenseVer.2
開発者絶賛募集中!