はじめに
.NETのアセンブリにはアセンブリ署名という機能が付いています。署名をすることにより厳密名を持っているという状態になり、さまざまな恩恵を得られます。
本稿では、このアセンブリ署名とコードアクセスセキュリティについて解説していきたいと思います。
対象読者
.NET(Windows Forms、ASP.NET問わず)での開発をされている方。
必要な環境
Visual Studio 2005の環境で検証しています。2002/2003では画面などが違いますが、基本的な考え方は同じです。
まずはアセンブリに署名をしてみよう
署名のやり方は非常に簡単です。まずはプロジェクトのプロパティを見てみましょう。C#とVBでタブが若干違いますが、署名タブの中身は同一です。以降、基本的にC#で解説を行います。
各プロジェクトのプロパティページにある[アセンブリの署名]をチェックすると、キーファイルを指定するようになっているので、[<新規作成...>]を選択します。
次に[厳密な名前キーの作成]ダイアログが開きますので、キーファイル名とパスワードを入力します。
通常キーファイル名には「.pfx」という拡張子を付けるのが一般的となっています。拡張子は自動で付けられますので、拡張子を除いた部分を入力します。
今回は「codezine」というキーファイル名を付けた上で[OK]を押し、キーファイルを作成しました。
このようにプロジェクトのアイテムとして「codezine.pfx」が格納されていることが確認できます。
.NET 1.xの時代にはpfxというパスワードつきの証明書を利用することができませんでした。パスワードの無い証明書ファイルを利用したり、データストアに手動でインストールしたりする必要がありました。
署名をすることによるメリット
アセンブリ署名を付けることにより、従来のプログラムでは不可能だった、さまざまなメリットを受けることができます。アセンブリ署名のメリットをいくつか見ていきましょう。
メリット1:参照DLLが変わっていないことを証明する
署名をすることによりどのようなメリットが得られるのでしょうか。
まず第1に挙げられるのはDLLハイジャックの防止です。DLLを署名している場合に、署名していないDLLに差し替えたりDLLを改変したりしたりすると、次のようなエラーが発生します。
これはDLLなどがハイジャックされないことを示しています。.NETのDLLの場合内部はMSILという中間言語で生成されており、容易に不正なロジックを紛れ込ませることが可能です。