どのようなセキュリテ機能が搭載されているのか? セキュリティを高める証明書や権限設定を説明。さらに次期ClickOnceの機能に触れる。
2006/12/02 更新
本連載ではこれまで、ClickOnceの基本的な動作や仕組み、開発方法と運用方法について説明してきたが、今回が最終回となる。最後は、ClickOnceで特に気になるセキュリティについての話である。具体的には次の内容を説明する。
ClickOnceによって配置されたアプリケーション(以降、ClickOnceアプリ)が配布される仕組み(ClickOnceローダー)は「第2回 ClickOnceの仕組みを理解しよう」の「ClickOnceデプロイメントの流れ(ClickOnceローダー)」の項で解説した。その項の(5)の「実際にそれらをダウンロードする前に、エンド・ユーザーに対してそのアプリケーションをインストール/実行してもよいかどうかを尋ねるためのセキュリティ警告を表示する。」という処理の中では、セキュリティ検証作業が行われている。この作業を行っているのがTrustManager(信頼マネージャ)という機能である。
TrustManagerの働きを簡略化して示したのが次の図だ。まずはこの図の内容について説明していこう。
以下では、この図内の(1)〜(4)の各項目について解説していく。
(1)「信頼されたアプリケーション」一覧に登録済みか?
ClickOnceローダーは、インストールもしくは実行しようとしているClickOnceアプリが「信頼されたアプリケーション」の一覧(ATL:Application Trust List)に登録されているかをチェックする。ここに登録されていれば、そのアプリケーションは「信頼できるもの」と判定して、何も表示せずに即座にアプリケーションを起動する。登録されていなければTrustManagerを呼び出し、次の処理ステップに進む。
【コラム】信頼されたアプリケーションとは?
「信頼されたアプリケーション」一覧は、ClickOnceによって信頼されているアプリケーションに関する情報を格納したもので、ClickOnceアプリをいったん起動すると自動的に一覧に追加される。この一覧情報は、アセンブリのバージョン名までをも含めた完全名でユーザーごとに管理され、さらにアプリケーションに適用されるセキュリティ・ポリシー(詳細後述)もここで管理されている。
この一覧の内容は、GUIツールによって参照/削除したり、プログラミング・コードによって参照/追加/削除したりできる。
GUIツールとしては、.NET Framework 2.0 SDKをインストールすると追加される(コントロール・パネルの)管理ツール「.NET Framwork 2.0 構成」を用いる。具体的には次の画面を参考にしてほしい。
またコードからは、ApplicationSecurityManagerクラス(System.Security.Policy名前空間)を使ってアクセスを行う。具体的には次のサンプル・プログラムを参考にしてほしい(コード内容の説明は割愛する。コメントを参考にしてほしい)。
using System;
using System.Security;
using System.Security.Policy;
using System.IO;
using System.Xml;
class Program
{
static void Main(string[] args)
{
bool first = true;
foreach (ApplicationTrust appTrust
in ApplicationSecurityManager.UserApplicationTrusts)
{
string fullname = appTrust.ApplicationIdentity.FullName;
if (first)
{
first = false;
// アプリケーションに関する情報をXML形式に変換
SecurityElement se = appTrust.ToXml();
Console.WriteLine(se.ToString());
Console.WriteLine(
"\"" + fullname + "\"には上記の設定が含まれています。");
// 信頼されたアプリケーションの一覧から削除
ApplicationIdentity appIdDelete =
appTrust.ApplicationIdentity;
ApplicationSecurityManager.UserApplicationTrusts.Remove(
appIdDelete, ApplicationVersionMatch.MatchExactVersion);
Console.WriteLine(
"\"" + fullname + "\"を削除しました。");
// 信頼されたアプリケーションの一覧に追加
ApplicationIdentity appIdAdd =
new ApplicationIdentity(fullname);
ApplicationTrust appTrustAdd =
new ApplicationTrust(appIdAdd);
appTrustAdd.FromXml(se);
ApplicationSecurityManager.UserApplicationTrusts.Add(
appTrustAdd);
Console.WriteLine(
"\"" + fullname + "\"を追加しました。");
Console.WriteLine("\n以下に一覧を生成します。");
}
Console.WriteLine(fullname);
}
}
}
このプログラムの実行例は以下のようになる。
<ApplicationTrust version="1"
FullName="http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"
TrustedToRun="true"
Persist="true">
<DefaultGrant>
<PolicyStatement version="1">
<PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>
</PolicyStatement>
</DefaultGrant>
<ExtraInfo Data="0001000000FFFFFFFF01000000000000000C020000005753797374656D2E57696E646F77732E466F726D732C2056657273696F6E3D322E302E302E302C2043756C747572653D6E65757472616C2C205075626C69634B6579546F6B656E3D6237376135633536313933346530383905010000003053797374656D2E53656375726974792E506F6C6963792E4170706C69636174696F6E54727573744578747261496E666F010000001872657175657374735368656C6C496E746567726174696F6E000102000000000B"/>
</ApplicationTrust>
"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"には上記の設定が含まれています。
"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"を削除しました。
"http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32"を追加しました。
以下に一覧を生成します。
http://www.atmarkit.co.jp/fdotnet/vblab/demo/ActiveReportsNET2Pro/Charting.application#Charting.application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil/Charting.exe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fa9334b343fd3b74, processorArchitecture=msil, type=win32
http://www.cyborg.ne.jp/~xelf/GalaxyGUI/GalaxyGUI.application#GalaxyGUI.application, Version=0.0.0.11, Culture=neutral, PublicKeyToken=6906c585feb180b1, processorArchitecture=msil/GalaxyGUI.exe, Version=0.0.0.11, Culture=neutral, PublicKeyToken=6906c585feb180b1, processorArchitecture=msil, type=win32
file:///C:/WINDOWS/Microsoft.Net/Framework/v3.0/WPF/XamlViewer/XamlViewer_v0300.xbap#XamlViewer_v0300.application, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c3bce3770c238a49, processorArchitecture=msil/XamlViewer_v0300.exe, Version=3.0.0.0, Culture=neutral, PublicKeyToken=c3bce3770c238a49, processorArchitecture=msil, type=win32
上記サンプル・プログラムの実行例
なお、ClickOnceアプリが実行される前に、プログラムによって「信頼されたアプリケーション」一覧にそのアプリケーションを登録しても、それが実際にローカル・ディスクにインストール/ダウンロードされていなければ、以下で説明するTrustManagerによるセキュリティ検証処理が実行される。
Copyright© Digital Advantage Corp. All Rights Reserved.