39
webstart-maven-plug webstart-maven-plug in in + + 無無無無無 無無無無無 ? ? 無無無無無無 無無無無無無 無無無無無無無無無無 無無無無無無無無無無 無無 無無 無無 無無 <[email protected]. <[email protected]. jp> jp>

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

  • Upload
    hiroya

  • View
    8.531

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

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

webstart-maven-pluginwebstart-maven-plugin++

無償で正統無償で正統 ?? なコード署なコード署名名

証明書を入手する方法証明書を入手する方法

久保 裕也 久保 裕也 <[email protected]><[email protected]>

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

自己紹介 自己紹介 ________►なまえ: くぼひろやなまえ: くぼひろや►しごと:しごと:

  オープンソースプログラマオープンソースプログラマ         兼 大学教員         兼 大学教員

► JavaOneTokyo2005 JavaOneTokyo2005 Night for Java TechNight for Java Tech 出出場場

► IPAIPA 未踏ソフト未踏ソフト 20072007 年年 II 期採択者期採択者 採択テーマ:「採択テーマ:「 SQS2.0SQS2.0 の開発」の開発」

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

いいたいこと!いいたいこと!►みんな、もっと、みんな、もっと、

デスクトップアプリを書こうデスクトップアプリを書こうよ!よ!

►クライアント側クライアント側へのアプリ配布には、へのアプリ配布には、JavaWebStartJavaWebStart が最適。が最適。

►JavaWebStartJavaWebStart での開発には、での開発には、Maven2Maven2 が便利だよ!が便利だよ!

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

JavaWebStartJavaWebStart 、、つかってますつかってます

か?か?  

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

JavaWebStart JavaWebStart とは?とは?►ブラウザ上から、クリックひとつブラウザ上から、クリックひとつ

で、で、JavaJava アプリを起動させるしくみアプリを起動させるしくみ。。 AIR, ClickOnce AIR, ClickOnce などと類似の技術などと類似の技術

►オフラインでの起動も可能。オフラインでの起動も可能。►オンラインなら最新バージョンへの更新も簡単。オンラインなら最新バージョンへの更新も簡単。

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

たとえばこんな感じたとえばこんな感じ►http://plat.prof.cuc.ac.jp/http://plat.prof.cuc.ac.jp/

~hiroya/sprite/piano.jnl~hiroya/sprite/piano.jnlpp

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

JavaWebStartJavaWebStart アプリの開発・配アプリの開発・配置置

►「配布用ファイル群」を用意す「配布用ファイル群」を用意するる メタデータメタデータ (JNLP(JNLP ファイルファイル )) を書くを書く JarJar ファイルをパックするファイルをパックする

(( JarJar ファイルに署名する)ファイルに署名する)

►「配布用ファイル群」を「配布用ファイル群」をWebWeb サーバ上に配置するサーバ上に配置する

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

JavaWebStartJavaWebStart のセキュリのセキュリティティ

►デフォルトでは、デフォルトでは、 SandBoxSandBox 内内で動作で動作

► 開発者が、システム資源を、開発者が、システム資源を、 JNLP APIJNLP API 経由で経由で獲得するようにプログラムを書けば、獲得するようにプログラムを書けば、

  ユーザが、システム資源を、逐次的・明示的に許可するこ  ユーザが、システム資源を、逐次的・明示的に許可することで、ローカルファイルの読み書き等が可能にとで、ローカルファイルの読み書き等が可能に

► 開発者開発者 // 配布者が、配布者が、すべてのすべての JarJar にコード署名にコード署名をし、をし、

ユーザが、初回起動時に許可をすれば、ユーザが、初回起動時に許可をすれば、SandBoxSandBox 外外で動作させることも可で動作させることも可

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

「このセキュリティ証明「このセキュリティ証明書は、書は、信頼できる団体によっ信頼できる団体によってて発行されています」発行されています」

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

ところで。ところで。ちょっと本気のちょっと本気の JavaJava プロジェクトプロジェクト

では:では:依存関係にある依存関係にある jarjar ファイルの数が、ファイルの数が、

1010 個や個や 2020 個になるくらいのものが、個になるくらいのものが、

珍しくない珍しくない。。

► net.sqs2:sqs-utilnet.sqs2:sqs-util► org.mortbay.jetty:jettyorg.mortbay.jetty:jetty► org.mortbay.jetty:jetty-utilorg.mortbay.jetty:jetty-util► org.mortbay.jetty:servlet-api-2.5org.mortbay.jetty:servlet-api-2.5► xalan:xalanxalan:xalan► xerces:xercesImplxerces:xercesImpl► velocity:velocityvelocity:velocity► oro:orooro:oro► batik:batik-awt-utilbatik:batik-awt-util► com.lowagie:itextcom.lowagie:itext► net.sf.ehcache:ehcachenet.sf.ehcache:ehcache► org.apache.poi:poiorg.apache.poi:poi

► commons-collections:commons-collectionscommons-collections:commons-collections► commons-httpclient:commons-httpclientcommons-httpclient:commons-httpclient► commons-logging:commons-loggingcommons-logging:commons-logging► commons-lang:commons-langcommons-lang:commons-lang► commons-codec:commons-codeccommons-codec:commons-codec► commons-digester:commons-digestercommons-digester:commons-digester► commons-beanutils:commons-beanutilscommons-beanutils:commons-beanutils► commons-io:commons-iocommons-io:commons-io► net.sourceforge.collections:collections-genericnet.sourceforge.collections:collections-generic► xnap-commons:xnap-commonsxnap-commons:xnap-commons► gettext-commons:gettext-commonsgettext-commons:gettext-commons► jfree:jfreecharjfree:jfreechar tt► jfree:jcommonjfree:jcommon

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

►開発・設定・署名・配布などなど、開発・設定・署名・配布などなど、多様な場面・ツール内で、多様な場面・ツール内で、

いろいろないろいろな jarjar ファイルファイルへの参照を、への参照を、

膨大な数膨大な数で管理しなければならない!で管理しなければならない! 開発環境で、開発環境で、 jarjar ファイルを設定……ファイルを設定…… JNLPJNLP ファイルで、ファイルで、 jarjar ファイルを設定……ファイルを設定…… antant でコード署名をするためにでコード署名をするために build.xmlbuild.xml 内で内で

jarjar ファイルを設定……ファイルを設定……

…… 特に、コード署名が、面倒くさい!特に、コード署名が、面倒くさい!

というわけで、というわけで、色々と面倒くさい!色々と面倒くさい!

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

webstart-maven-pluginwebstart-maven-plugin

を、使おう!を、使おう!

ここからは、ようやくここからは、ようやく MavenMaven の話です。の話です。

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

pom.xml pom.xml 内で、内で、webstart-maven-pluginwebstart-maven-plugin をを

設定設定<plugin><plugin>   <groupId><groupId>

org.codehaus.mojoorg.codehaus.mojo </groupId></groupId> <artifactId> <artifactId> webstart-maven-pluginwebstart-maven-plugin </artifactId> </artifactId>

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

.jnlp.jnlp で必要なで必要な artifactartifact 名を名をひたすら列挙ひたすら列挙<configuration><configuration>

<spec>1.0+</spec><spec>1.0+</spec><dependencies><dependencies>     <includes><includes>

<include><include>org.mortbay.jetty:jettyorg.mortbay.jetty:jetty</include></include><include><include>org.mortbay.jetty:jetty-utilorg.mortbay.jetty:jetty-util</include></include><include><include>org.mortbay.jetty:servlet-api-2.5org.mortbay.jetty:servlet-api-2.5</include></include><include><include>xalan:xalanxalan:xalan</include></include><include><include>xerces:xercesImplxerces:xercesImpl</include></include><include><include>batik:batik-awt-utilbatik:batik-awt-util</include></include><include>o<include>org.apache.poi:poirg.apache.poi:poi</include></include><include><include>commons-httpclient:commons-httpclientcommons-httpclient:commons-httpclient</include></include><include><include>commons-logging:commons-loggingcommons-logging:commons-logging</include></include><include><include>commons-lang:commons-langcommons-lang:commons-lang</include></include><include><include>commons-codec:commons-codeccommons-codec:commons-codec</include></include><include><include>commons-digester:commons-digestercommons-digester:commons-digester</include></include><include><include>commons-beanutils:commons-beanutilscommons-beanutils:commons-beanutils</include></include><include><include>commons-io:commons-iocommons-io:commons-io</include></include>

これらのこれらのartifactartifact 群で、群で、JWSJWS アプリのアプリの構成を指定する構成を指定するよ。よ。

これらのこれらのartifactartifact 群で、群で、JWSJWS アプリのアプリの構成を指定する構成を指定するよ。よ。

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

.jnlp.jnlp ファイルを生成するためファイルを生成するためのの

VelocityVelocity のテンプレートを指のテンプレートを指定定<jnlp><jnlp>

<version><version>1.01.0+</version>+</version>

<inputTemplate><inputTemplate> src/jnlp/jnlp.vmsrc/jnlp/jnlp.vm </inputTemplate></inputTemplate> <outputFile><outputFile> HogeHoge.jnlpHogeHoge.jnlp </outputFile></outputFile>

<mainClass><mainClass> com.example.foo.bar.MainClasscom.example.foo.bar.MainClass </mainClass></mainClass></jnlp></jnlp>

.vm.vm でで ${dependencies}${dependencies}と書いておけば、と書いておけば、pom.xmlpom.xml のの <depende<dependencies>ncies>要素以下をもとに、要素以下をもとに、

<jar><jar> 要素群を要素群を自動埋め込みする自動埋め込みするよ!よ!

.vm.vm でで ${dependencies}${dependencies}と書いておけば、と書いておけば、pom.xmlpom.xml のの <depende<dependencies>ncies>要素以下をもとに、要素以下をもとに、

<jar><jar> 要素群を要素群を自動埋め込みする自動埋め込みするよ!よ!

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

コード署名のための設定コード署名のための設定<sign><sign>     <keystore><keystore>       /home/javajava/verisign.p12/home/javajava/verisign.p12

     </keystore></keystore> <keypass /><keypass /> <storepass><storepass>xxxxxxxxxxxxxxxx</storepass></storepass> <storetype>pkcs12</storetype><storetype>pkcs12</storetype> <alias><alias> example.com's verisign, inc. idexample.com's verisign, inc. id </alias></alias> <verify>false</verify><verify>false</verify></sign></sign>

ここで指定したここで指定した鍵ストア・鍵ストア・ aliasalias で、で、

..jarjar ファイル群をファイル群を自動的に署名するよ自動的に署名するよ

ここで指定したここで指定した鍵ストア・鍵ストア・ aliasalias で、で、

..jarjar ファイル群をファイル群を自動的に署名するよ自動的に署名するよ

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

►target/jnlp/target/jnlp/ の下に、の下に、HogeHoge.jnlpHogeHoge.jnlp ファイルファイル そのプロジェクトのそのプロジェクトの artifactartifact のの jarjar ファイファイ

ルル 依存依存 artifacartifac tのtの jarjar ファイルその1ファイルその1 依存依存 artifacartifac tのtの jarjar ファイルその2ファイルその2 依存依存 artifacartifac tのtの jarjar ファイルその3…ファイルその3…

 を、作成する。 を、作成する。

これら全部が、これら全部が、   mvn installmvn install

一発で完成!一発で完成!

これら全部が、これら全部が、   mvn installmvn install

一発で完成!一発で完成!

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

    

すっげー便利!すっげー便利!ということがということが

 わかった人、 わかった人、拍手してくださ拍手してください!い!

すっげー便利!すっげー便利!ということがということが

 わかった人、 わかった人、拍手してくださ拍手してください!い!

ありがとうありがとう

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

「コード署名証明書」、「コード署名証明書」、買ったことありますか?買ったことありますか?

ここで質問ここで質問 ..

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

►VerisignVerisign社のコード署名証明書社のコード署名証明書 ¥ ¥ 94,500(94,500( 税込、税込、 11年間有効年間有効 ) )

►GlobalSignGlobalSign社のコード署名証明書社のコード署名証明書 ¥ ¥ 39,900(39,900(キャンペーン価格キャンペーン価格 ;-,;-,税込、税込、 11年間有効年間有効 ))

毎年の更新時に、毎年の更新時に、「組織の実在性確認」「申請の意思確認」を「組織の実在性確認」「申請の意思確認」を受けなければならない受けなければならない ..

コード署名証明書の費用コード署名証明書の費用

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

証明書購入プロセス証明書購入プロセス► 技術担当者技術担当者が,購入内容と購入手順を示した計画書を作成 が,購入内容と購入手順を示した計画書を作成 ► えらいひとえらいひとが,計画書をもとに購入にが,計画書をもとに購入に GOGO サインを出すサインを出す

► 事務担当者事務担当者が,組織の存在証明に必要な書類一式を揃えて認が,組織の存在証明に必要な書類一式を揃えて認証局に郵送 証局に郵送

► 技術担当者技術担当者が,が, WebWeb などを通じて「コード署名証明書」のなどを通じて「コード署名証明書」の発行を認証局に依頼発行を認証局に依頼

► 会計担当者会計担当者が,金融機関を通じて購入手続きを行なうが,金融機関を通じて購入手続きを行なう

► えらいひとえらいひとが,認証局からの電話連絡に答えて存在証明をすが,認証局からの電話連絡に答えて存在証明をするる

► 技術担当者技術担当者が,が, WebWeb を通じて「コード署名証明書」を取得を通じて「コード署名証明書」を取得► 技術担当者技術担当者が,「コード署名証明書」を用いて署名作業を行が,「コード署名証明書」を用いて署名作業を行

なうなう

これを毎年アレンジこれを毎年アレンジするのは、正直、するのは、正直、ものすごーくものすごーく面倒くさい!!!面倒くさい!!!((とくに、とくに、えらいひとえらいひと関連…関連… ))

これを毎年アレンジこれを毎年アレンジするのは、正直、するのは、正直、ものすごーくものすごーく面倒くさい!!!面倒くさい!!!((とくに、とくに、えらいひとえらいひと関連…関連… ))

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

「オレオレ証明書」、「オレオレ証明書」、使ってますか?使ってますか?

ここで質問ここで質問 ..

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

JavaWebStartJavaWebStart は、は、何らかのコード署名をしないと、何らかのコード署名をしないと、

はっきりいって使い物にならない!はっきりいって使い物にならない!

► (( 本番の環境なのに本番の環境なのに ) ) 「「オレオレ証明書オレオレ証明書」を作って」を作って使っている例が多い。使っている例が多い。Cf. Cf. 「高木浩光@自宅の日記」「高木浩光@自宅の日記」 http://takagi-hiromitsu.jp/diaryhttp://takagi-hiromitsu.jp/diary//

►これに対し、これに対し、 Sun JRESun JREは、わりと激しい文面で、は、わりと激しい文面で、「「オレオレ証明書だから起動をしないように!オレオレ証明書だから起動をしないように!」」という意味の警告表示をしてくる。という意味の警告表示をしてくる。

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

コード署名の「理想」と「現コード署名の「理想」と「現実」実」

►PKIPKI の崇高なる理想、しかし、の崇高なる理想、しかし、►各種の各種の「オレオレ証明書」「オレオレ証明書」が氾濫するが氾濫する

現実。現実。►「オレオレ証明書」の警告を、「オレオレ証明書」の警告を、

ユーザにわざわざ無視させるような、ユーザにわざわざ無視させるような、危険な操作マニュアルが、危険な操作マニュアルが、まかり通っている。まかり通っている。

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

無償で正統?な無償で正統?なコード署名証明書をコード署名証明書を

入手する方法入手する方法

(( アンチテーゼとしてアンチテーゼとして ))  

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

Thawte Thawte Personal e-mail certificatesPersonal e-mail certificates

メアドさえあれば、メアドさえあれば、誰にでも無料で、誰にでも無料で、その場ですぐにその場ですぐに、、メール署名用のメール署名用の証明書証明書 ((PKCS7PKCS7))を発行してくれる。を発行してくれる。

この証明書は、この証明書は、jarsignerjarsigner でのでのコード署名にもコード署名にも使える使える。。

http://www.thawte.com/

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

JavaJava コンパネの「証明書」画面コンパネの「証明書」画面

デフォルトでは、 Class3 CA と、Freemail CA が、なぜか同等の認証機関として設定されている!

デフォルトでは、 Class3 CA と、Freemail CA が、なぜか同等の認証機関として設定されている!

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

Thawte Personal Freemail CAThawte Personal Freemail CA ははどのように扱うべきか?どのように扱うべきか?

►SunSun は、は、 JREJREコンパネのコンパネの SignerCA/SystemSignerCA/System かから、ら、Thawte Personal Freemail CAThawte Personal Freemail CA のエントリをのエントリを削除すべきではないのか?削除すべきではないのか?

► (Sun(Sun がどうするかはともかくとして、がどうするかはともかくとして、 ))ユーザは、ユーザは、こういう怪しいこういう怪しい CACA をを自分の判断で自分の判断で RemoveRemove する能力を持つべき。する能力を持つべき。

►開発者開発者 // 配布者は、配布者は、「オレオレ証明書」を「オレオレ証明書」を本番で使ってはいけない!本番で使ってはいけない!

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

  

  

ちなみに、ちなみに、 Maven2Maven2 のドキュメントにのドキュメントには、は、こんな記述があります:こんな記述があります:

MavenMaven リポジトリについて…リポジトリについて…It should be noted that Maven intends to incluIt should be noted that Maven intends to inclu

de enhanced support for such features in thde enhanced support for such features in the future, including click through licenses on e future, including click through licenses on downloading, and verification of signaturesdownloading, and verification of signatures..

http://maven.apache.org/guides/introduction/introduction-to-repositories.html

「「 MavenMaven では、ダウンロード時のクでは、ダウンロード時のクリックスルーライセンスや署名の確認リックスルーライセンスや署名の確認を含む機能拡張を行う予定がある」を含む機能拡張を行う予定がある」((Maven翻訳サブプロジェクト訳訳))

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

    

コード署名証明書は、購入コード署名証明書は、購入も利用も、色々と面倒だも利用も、色々と面倒だけど、けど、

 ユーザには、なるべく ユーザには、なるべく正しい使い方をさせよう!正しい使い方をさせよう!

コード署名証明書は、購入コード署名証明書は、購入も利用も、色々と面倒だも利用も、色々と面倒だけど、けど、

 ユーザには、なるべく ユーザには、なるべく正しい使い方をさせよう!正しい使い方をさせよう!

おわおわりり

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

参考:元ネタ初出時の参考:元ネタ初出時の URLURL

►webstart-maven-pluginwebstart-maven-plugin http://sqs.cmr.sfc.keio.ac.jp/tdiary/20070709.http://sqs.cmr.sfc.keio.ac.jp/tdiary/20070709.

html#p01html#p01►無償で正統的なコード署名証明書を入手す無償で正統的なコード署名証明書を入手す

る方法る方法http://sqs.cmr.sfc.keio.ac.jp/tdiary/200510http://sqs.cmr.sfc.keio.ac.jp/tdiary/20051003.html03.html

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

おまけおまけ  

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

JavaWebStartJavaWebStart 、、たとえば、たとえば、

こんなふうに使えます。こんなふうに使えます。

本発表者による開発事例本発表者による開発事例(IPA(IPA 未踏「未踏「 SQS2.0SQS2.0 の開発」での案の開発」での案

件件 ))

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

SwingSwing アプリ内部でアプリ内部で PDFPDF を生を生成し、成し、

JNLP APIJNLP API のブラウザ連携機能のブラウザ連携機能で、そので、その PDFPDF をを AdobeReaderAdobeReader

で表示で表示

紙帳票の紙帳票の PDFPDF

XHTMLXHTML++ XFormsXForms から、から、 XSLTXSLT で、で、 SVGPrint,FOSVGPrint,FO を作ってを作って紙帳票紙帳票 ((アンケート用紙)を印刷アンケート用紙)を印刷

アウトライン編集型アウトライン編集型XMLXML エディタエディタ

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

汎用のADF(自動紙送り )装置付きスキャナで

スキャン

汎用のADF(自動紙送り )装置付きスキャナで

スキャン

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

たくさん起動しておくと、たくさん起動しておくと、自動的に分散並列して自動的に分散並列して処理が高速化する処理が高速化する

JavaWebStartJavaWebStart ででP2PP2P グリッドグリッド

紙帳票紙帳票 (( アンケート用紙)アンケート用紙)スキャン画像の解析・読み取りスキャン画像の解析・読み取り

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

JavaWebStartJavaWebStart からから起動させた起動させた httpdhttpd とと

でで AjaxAjax

紙帳票紙帳票 (( アンケート用紙)の集計結果をアンケート用紙)の集計結果をiTunesiTunes 的的 GUIGUI でで検索・閲覧・修正・データ書き出し検索・閲覧・修正・データ書き出し

GoogleGearsGoogleGears 的な仕組みを、自前で実装してみる的な仕組みを、自前で実装してみる

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

「「 SQSSQS」で検索」で検索http://http://

www.google.co.jp/search?qwww.google.co.jp/search?q=SQS=SQS

ApacheLicenseVer.2ApacheLicenseVer.2開発者絶賛募集中!開発者絶賛募集中!