厳密な名前のシナリオ
更新 : 2007 年 11 月
厳密な名前でアセンブリに署名してから、その名前を使用してアセンブリを参照するプロセスの概要を、次のシナリオに示します。
厳密な名前付きのアセンブリ A を、次の方法の 1 つを使用して作成します。
Visual Studio 2005 など、厳密な名前の作成をサポートする開発環境を使用します。
厳密名ツール (Sn.exe) を使用して暗号キー ペアを作成し、コマンド ライン コンパイラまたはアセンブリ リンカ (Al.exe) を使用してアセンブリにキーのペアを割り当てます。Windows Software Development Kit (SDK) には、Sn.exe と Al.exe の両方が用意されています。
開発環境またはツールが、アセンブリ マニフェストを格納するファイルのハッシュに、開発者の秘密キーで署名します。このデジタル署名は、アセンブリ A のマニフェストを格納するポータブル実行可能 (PE) ファイルに格納されます。
アセンブリ B はアセンブリ A のコンシューマです。アセンブリ B のマニフェストの参照セクションには、アセンブリ A の公開キーを表すトークンが含まれます。トークンは完全な公開キーの一部であり、領域を節約するためにキー自体の代わりに使用されます。
共通言語ランタイムは、アセンブリがグローバル アセンブリ キャッシュに配置されるときに、厳密な名前の署名を検証します。実行時に厳密な名前によってバインドする場合、共通言語ランタイムは、アセンブリ B のマニフェストに格納されたキーと、アセンブリ A の厳密な名前の生成に使用されたキーを比較します。.NET Framework のセキュリティ チェックに合格してバインドが成功した場合、アセンブリ A のビットは変更がなく、アセンブリ A の開発者が提供したビットと同一であることが、アセンブリ B に対して保証されます。
メモ : |
---|
このシナリオでは、信頼性問題は扱いません。アセンブリは、厳密な名前に加えて、完全な Microsoft Authenticode 署名を持つことができます。Authenticode 署名には、信頼を確立する証明書が含まれます。厳密な名前はこの方法でのコード署名を必要としないことに注意してください。厳密な名前の署名の生成に使用するキーは、Authenticode 署名の生成に使用するキーと同じである必要はありません。 |
完全に信頼されているアセンブリの署名検証のバイパス
.NET Framework version 3.5 Service Pack 1 以降では、アセンブリが完全信頼のアプリケーション ドメイン (MyComputer ゾーンに既定のアプリケーション ドメインなど) に読み込まれている場合は、厳密な名前の署名の検証が行われなくなりました。これは、厳密な名前のバイパス機能と呼ばれます。完全信頼環境での StrongNameIdentityPermission の要求は、そのシグネチャに関係なく、署名された完全信頼アセンブリであれば常に成功します。厳密な名前のバイパス機能により、このような状況における完全信頼アセンブリの厳密な名前の署名の検証による不要なオーバーヘッドを回避し、アセンブリを高速に読み込むことができます。
バイパス機能は、厳密な名前を使用して署名されたすべてのアセンブリと、次のような特性を持つすべてのアセンブリに適用されます。
StrongName 証拠のない (たとえば、MyComputer ゾーンの証拠が付与されている)、完全に信頼されているアセンブリ
完全に信頼されている AppDomain に読み込まれたアセンブリ
AppDomain の ApplicationBase プロパティで指定された場所から読み込まれたアセンブリ
遅延署名されていないアセンブリ
この機能は、アプリケーションごとまたはコンピュータごとに無効にできます。「方法 : 厳密な名前のバイパス機能を無効にする」を参照してください。