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

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

どのようなセキュリテ機能が搭載されているのか? セキュリティを高める証明書や権限設定を説明。さらに次期ClickOnceの機能に触れる。

[一色政彦,デジタルアドバンテージ]
連載 ClickOnceの真実
Insider.NET

 

「連載 ClickOnceの真実」のインデックス

連載目次

2006/12/02 更新

 本連載ではこれまで、ClickOnceの基本的な動作や仕組み、開発方法と運用方法について説明してきたが、今回が最終回となる。最後は、ClickOnceで特に気になるセキュリティについての話である。具体的には次の内容を説明する。

  • ClickOnceセキュリティの仕組み
    ― ClickOnceローダーで働くTrustManager
  • ClickOnceセキュリティの設定方法
    ― 1. デジタル証明書による署名方法
    ― 2. ClickOnceの権限要求の設定方法
  • ClickOnceの将来展望
    ― 次期ClickOnceで拡張予定の機能

■セキュリティの仕組み ― ClickOnceローダーで働くTrustManager

 ClickOnceによって配置されたアプリケーション(以降、ClickOnceアプリ)が配布される仕組み(ClickOnceローダー)は「第2回 ClickOnceの仕組みを理解しよう」の「ClickOnceデプロイメントの流れ(ClickOnceローダー)」の項で解説した。その項の(5)の「実際にそれらをダウンロードする前に、エンド・ユーザーに対してそのアプリケーションをインストール/実行してもよいかどうかを尋ねるためのセキュリティ警告を表示する。」という処理の中では、セキュリティ検証作業が行われている。この作業を行っているのがTrustManager(信頼マネージャ)という機能である。

 TrustManagerの働きを簡略化して示したのが次の図だ。まずはこの図の内容について説明していこう。

ClickOnceのセキュリティを高めるTrustManagerの働き

 以下では、この図内の(1)(4)の各項目について解説していく。

 (1)「信頼されたアプリケーション」一覧に登録済みか?

  ClickOnceローダーは、インストールもしくは実行しようとしているClickOnceアプリが「信頼されたアプリケーション」の一覧(ATL:Application Trust List)に登録されているかをチェックする。ここに登録されていれば、そのアプリケーションは「信頼できるもの」と判定して、何も表示せずに即座にアプリケーションを起動する。登録されていなければTrustManagerを呼び出し、次の処理ステップに進む。

【コラム】信頼されたアプリケーションとは?
 「信頼されたアプリケーション」一覧は、ClickOnceによって信頼されているアプリケーションに関する情報を格納したもので、ClickOnceアプリをいったん起動すると自動的に一覧に追加される。この一覧情報は、アセンブリのバージョン名までをも含めた完全名でユーザーごとに管理され、さらにアプリケーションに適用されるセキュリティ・ポリシー(詳細後述)もここで管理されている。

 この一覧の内容は、GUIツールによって参照/削除したり、プログラミング・コードによって参照/追加/削除したりできる。

 GUIツールとしては、.NET Framework 2.0 SDKをインストールすると追加される(コントロール・パネルの)管理ツール「.NET Framwork 2.0 構成」を用いる。具体的には次の画面を参考にしてほしい。

「.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);
    }
  }
}

ApplicationSecurityManagerクラスを用いた「信頼されたアプリケーション」一覧の参照/削除/追加

 このプログラムの実行例は以下のようになる。

<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によるセキュリティ検証処理が実行される。


       1|2|3|4 次のページへ

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

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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