連載
» 2006年12月02日 00時00分 公開

連載 ClickOnceの真実:第7回 ClickOnceが持つセキュリティ機構とは? (3/4)

[一色政彦,デジタルアドバンテージ]

■セキュリティの設定方法1― デジタル証明書による署名方法

 まずClickOnceを証明書で署名するには、「コードサイニング証明書(Authenticode対応Digital ID)」が必要となる。Visual Studio 2005(以降、VS 2005)のIDEでClickOnceの発行を行うと、ソリューション・エクスプローラに「<アセンブリ名>_ TemporaryKey.pfx」(例:「WindowsApplication1_TemporaryKey.pfx」)というファイルが追加されるが、このファイルがそれである。

 ClickOnceで使用可能な証明書は、すべて「.pfxファイル(Personal Information Exchange形式:PKCS#12)」の必要がある。入手もしくは作成した証明書ファイルが、例えば「秘密鍵ファイル(.pvkファイル:PriVate Key Certificate)と公開鍵ファイル(.spcファイル:Software Publisher's Certificate)」という形式(PKCS#7)の場合は、この.pfxファイルに変換する必要がある。

【コラム】.pvkファイル(PKCS#7)から.pfxファイル(PKCS#12)への変換方法

 この変換方法はいくつかあるが、ここではその一例としてマイクロソフトが提供している「PVK Digital Certificate Files Importer」を使った変換を紹介しよう。

(1)マイクロソフトのサイトから「PVK Digital Certificate Files Importer (英語版)」(pvkimprt.exe)をダウンロードする。ファイルは圧縮されているので、任意の場所(例えばデスクトップなど)に一時的に解凍し、生成されるpvkimprt.exeを実行すると、インストーラが起動する。インストール先は「C:\WINDOWS」などになっているのでそのままインストールすればよい。

(2)インストールし終わったら、コマンド・プロンプトを起動し、次のコマンドを実行する。

 PVKIMPRT -PFX <任意のファイル名>.spc <任意のファイル名>.pvk

 まずパスワードを聞かれるので、証明書ファイルを作成/入手したときに設定したパスワードを入力する。次に[証明書のエクスポート ウィザード]が起動するので、指示に従ってウィザードを進める。

 「秘密キーをエクスポートするか?」の質問には「はい」を、エクスポートするファイル形式は「Personal Information Exchange - PKCS #12 (PFX)」を選択する(その選択肢の下にあるチェックボックスは[強力な保護を有効にする]のみにチェックを入れる)。最初に入力したものと同じ「秘密キーのパスワード」を入力し、最後にエクスポートするファイル名(拡張子は「.pfx」)を設定すれば完了だ。

 ちなみに公開鍵ファイルが.spcではなく、.cerファイル(X.509証明書)であった場合も、そのまま.spcファイルの代わりに.cerファイルをPVKIMPRTコマンドに指定すればよい。


 ちなみに証明書を入手する方法は、VS 2005が自動作成するものに以外に、主に次の3つがある(これらの作成方法や購入方方法については割愛する)。

≪・・ makecert.exeやVisual Studio 2005を使って手動で作成

≫≪・・ VeriSignなどの第三者機関から購入

≫≪・・ Windows Certificate Serverを使って作成

 2はインターネット向きで、3はイントラネット向きである。3の場合、作成した証明書をActive Directoryのグループ・ポリシーを使って各ユーザーのコンピュータに登録できる。これにより、自社のアプリケーションのみを直接起動(=自動的な権限の昇格)できるようになり、エンド・ユーザーの手間を軽減でき、コスト低減につながるだろう。

●VS 2005のIDEにおける証明書の設定

 肝心の証明書の設定方法だが、次の画面のように、VS 2005のIDEから簡単に設定できる。

VS 2005のIDEにおける証明書の設定
[ソリューション エクスプローラ]でClickOnceアプリのプロジェクト項目を右クリックし、表示されるコンテキスト・メニューから[プロパティ]をクリックする。これによりプロジェクト・プロパティが開かれる。そのプロジェクト・プロパティの[署名]タブを開く。
  (1)ClickOnceの発行を行う場合は、[ClickOnce マニフェストに署名する]にチェックを入れる。チェックを入れずに発行を行っても、ここには自動的にチェックが入る。
  (2)証明書に関する簡単な情報が表示される。証明書の有効期限は基本的に1年である。有効期限内に署名したアプリケーションは、そのアプリケーションを再発行しない限りずっと使える。再発行する場合、証明書の有効期限が切れていれば、新しい証明書に更新して署名しなければならない。
  (3)[詳細情報]ボタンをクリックすると、証明書に関する詳細な情報が表示される。
  (4)署名日時(有効期限)を管理するタイム・サーバを指定できる。通常は何も指定しなくてよい。
  (5)[ストアから選択]ボタンをクリックすると、いままで利用した証明書の履歴(ストア)から、証明書を選択できる。
  (6)[ファイルから選択]ボタンをクリックすると、作成/購入し変換した.pfxファイルから証明書を選択できる。
  (7)[テスト証明書の作成]ボタンをクリックすると、テスト証明書(一時的な証明書)を作成する。ここで作成される証明書は発行元がコンピュータ名になったりするので、できれば上記2の購入あるいは3の作成が好ましいが、無償で証明書を作成できる1を採用する場合には、makecert.exeを使って発行元の名前などを明示的に指定して証明書を作成することをお勧めする。

■セキュリティの設定方法2― ClickOnceの権限要求の設定方法

 ClickOnceの権限要求が設定できるのは、部分信頼モードの場合のみである。

●VS 2005のIDEにおけるセキュリティ・モードの設定

 完全信頼と部分信頼の選択も、VS 2005のIDE上で簡単に行える。具体的には次の画面を参考にしてほしい。

VS 2005のIDEにおけるセキュリティ・モードの設定
セキュリティ・モード(完全信頼/部分信頼)を設定しているところ。
  (1)[ソリューション エクスプローラ]でClickOnceアプリのプロジェクト項目を右クリックし、表示されるコンテキスト・メニューから[プロパティ]をクリックする。これによりプロジェクト・プロパティが開かれる。
  (2)プロジェクト・プロパティの[セキュリティ]タブを開く。
  (3)[ClickOnce セキュリティ設定を有効にする]チェックボックスにチェックを入れる。ここにチェックを入れずに発行した場合も、IDEが自動的にチェックを入れてくれる。つまりClickOnceの発行を行う場合は必ずセキュリティ設定が有効となる。
  (4)ラジオボタンで[これは完全に信頼するアプリケーションです](=完全信頼)もしくは[これは部分的に信頼するアプリケーションです](=部分信頼)を選択する。

 ここで、完全信頼にすべきか、部分信頼にすべきか、という疑問を持つだろう。理想をいえば、部分信頼にして細かくアクセス許可を制御する方が、セキュリティ管理を行うという観点では好ましいかもしれない。しかし実際には、例えばアプリケーションの機能拡張が数多く行われる場合、その拡張のたびにアクセス許可の設定を行わなければならず、部分信頼の選択は手間が多く現実的ではない。つまりほとんどのソフトウェア開発では、完全信頼を選択するのが妥当だといえる。部分信頼は、変化の少ない安定的(で小規模)なアプリケーションに向いているだろう。

 ここでは、部分信頼で細かくアクセス許可を制御する方法についても見ておこう。

●部分信頼で細かくアクセス許可を制御する方法

 部分信頼アプリケーションは、.NET FrameworkのCASによる制限がかかっているため、悪意のあるコードは(基本的に)実行できないというメリットがある半面、そのセキュリティ制限にプログラミングまでもが制限を受けてしまうという問題がある。ClickOnceは、この問題に対処するために、ClickOnceアプリ自体が必要とするCASの要件(前述の、ClickOnceアプリの権限要求)を自分自身で持つ仕組みを採用している。

 ClickOnceアプリの権限要求はVS 2005のIDE上で設定できる。具体的には次の画面を参考にしてほしい。

VS 2005のIDEにおける権限要求の設定
権限要求(=使用するアクセス許可)の設定を行っているところ。前述の「VS 2005のIDEにおけるセキュリティ・モードの設定」の画面と同じように、プロジェクト・プロパティの[セキュリティ]タブを開く。その際、部分信頼を選択しておく。
  (1)ゾーンからデフォルトのアクセス許可セットを自動的に設定できる。「ローカル イントラネット」「インターネット」「(カスタム)」から選択でき、選択を切り替えると、(2)の含まれるアクセス許可の表示(緑色のマーク)が切り替わる。「(カスタム)」は完全に手動でアクセス許可を設定したいときに選択する。
  (2)[設定]のコンボボックスでアクセス許可の「必要/必要なし」を変更できる。ゾーンで必要とされないアクセス許可を「必要」に変更した場合、[含まれるアクセス許可]に黄色のマークが表示される。この状態で発行を行うと、エンド・ユーザーは権限の昇格が必要となる。アクセス許可の各項目の意味については「インサイド .NET Framework [改訂版]:第8回 コード・アクセス・セキュリティ(その3)」が参考になるだろう。この記事ページに記載されていないアクセス許可については、MSDNで検索して調べてほしい。
  (3)[アクセス許可の検出]ボタンをクリックすると、プログラム・コードを検証して必要なアクセス許可を自動的に選択してくれる。先ほどの(1)のゾーンの選択で「(カスタム)」を選んだうえで行うと、不必要なアクセス許可は設定されずに、必要なアクセス許可のみ設定できるというメリットがある。ただし、権限の昇格が起こるかどうかを予測するのが一見するだけでは難しくなるというデメリットもある。
  (4)[プロパティ]ボタンをクリックすると、各アクセス許可についてより詳しく設定したり、参照したりできる。
  (5)[リセット]ボタンをクリックすると、すべてのアクセス許可が((1)のゾーンごとの)デフォルト値に戻る。
  (6)[詳細設定]ボタンをクリックすると、[セキュリティの詳細設定]ダイアログが表示される。そのダイアログでは、部分信頼のセキュリティ環境でのデバッグを有効にするオプション(デフォルトはON)や、ダウンロード元/実行元のサイトにアクセスするためのアクセス許可のオプション(デフォルトはON)、デバッグ時にダウンロード元サイトと仮定して用いるURL(デフォルトは未入力)などが設定できる。ダウンロード元/実行元のサイトにアクセスするためのアクセス許可のオプション(厳密には[アプリケーション アクセスをその元のサイトに与える])は、ノータッチ・デプロイメントの時代からあったカスタム・コード・グループのNetCodeGroup(アセンブリのダウンロード元のサイトへのWebアクセスを許可。これにより、同一サイトのWebサービスが利用可能になる)と同じアクセス許可である。

 最後に次期.NET Framework 3.5でClickOnceがどのように機能拡張される予定になっているのかを説明して本連載を締めくくるとしよう。

Copyright© 1999-2018 Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。