アセンブリおよびマニフェストへの署名の管理

厳密な名前の署名により、ソフトウェア コンポーネントはグローバル一意識別子 (GUID) を付与されます。 厳密な名前を使用すると、別のユーザーによるアセンブリのなりすましが不可能になることが保証され、コンポーネントの依存関係と構成ステートメントが、適切なコンポーネントとコンポーネントのバージョンに確実に対応付けられます。

厳密な名前は、アセンブリの識別子 (単純テキスト名、バージョン番号、カルチャ情報)、公開キー トークン、およびデジタル署名で構成されます。

Visual Basic プロジェクトと C# プロジェクトのアセンブリへの署名については、「厳密な名前付きアセンブリの作成と使用」を参照してください。

Visual C++ プロジェクトのアセンブリへの署名については、「厳密名アセンブリ (アセンブリ署名) (C++/CLI)」を参照してください。

注意

厳密な名前の署名は、アセンブリのリバース エンジニアリングに対して保護されません。 リバース エンジニアリングに対して保護する方法については、「Dotfuscator Community Edition (CE)」を参照してください。

アセットの型と署名

.NET のアセンブリとアプリケーション マニフェストに署名することができます。 次に例を示します。

  • 実行可能ファイル (.exe)

  • アプリケーション マニフェスト (.exe.manifest)

  • 配置マニフェスト (.application)

  • 共有コンポーネント アセンブリ (.dll)

    次の種類のアセットに署名する必要があります。

  1. アセンブリ - アセンブリをグローバル アセンブリ キャッシュ (GAC: Global Assembly Cache) に配置する場合。

  2. ClickOnce のアプリケーション マニフェストと配置マニフェスト。 Visual Studio では、これらのアプリケーションに対する署名が既定で有効になります。

  3. COM 相互運用のために使用されるプライマリ相互運用機能アセンブリ。 TLBIMP ユーティリティは、COM タイプ ライブラリからプライマリ相互運用機能アセンブリを作成するときに、厳密な名前付けを強制的に適用します。

    一般に、実行可能ファイルに署名する必要はありません。 厳密な名前付きコンポーネントは、アプリケーションと共に配置される、厳密な名前を持たないコンポーネントを参照することはできません。 Visual Studio は、アプリケーションの実行可能ファイルに署名しませんが、厳密な名前を持たない実行可能ファイルを指すアプリケーション マニフェストに署名します。 署名を行うと、依存関係を管理しにくくなります。そのため、一般的に、アプリケーションにとってプライベートなコンポーネントに署名することは避けてください。

Visual Studio 内でアセンブリに署名する方法

[署名] タブを使用してアプリケーションまたはコンポーネントに署名するには、プロジェクトのプロパティ ウィンドウに移動 (ソリューション エクスプローラーでプロジェクト ノードを右クリックして [プロパティ] をクリックするか、[クイック起動] ウィンドウにプロジェクトのプロパティを入力するか、ソリューション エクスプローラー ウィンドウ内で Alt キーを押しながら Enter キーを押す) します。 [署名] タブを選択し、[アセンブリの署名] チェック ボックスをオンにします。

キー ファイルを指定します。 新しいキー ファイルを作成する場合は、新しいキー ファイルは必ず .pfx ファイル形式で作成されることに注意してください。 新しいファイルの名前とパスワードが必要です。

警告

キー ファイルは常にパスワードで保護して、第三者が使用できないようにする必要があります。 プロバイダーまたは証明書ストアを使用して、キーを保護することもできます。

また、既に作成したキーを指定することもできます。 キーの作成の詳細については、「方法 : 公開キーと秘密キーのキー ペアを作成する」を参照してください。

公開キーのみにアクセスできる場合は、遅延署名を使用して、キーの割り当てを遅延させることができます。 [遅延署名のみ] チェック ボックスをオンにすると、遅延署名が有効になります。 遅延署名されたプロジェクトは実行されず、デバッグすることもできません。 ただし、Sn.exe (厳密名ツール)-Vr オプションを指定すると、開発時に検証をスキップできます。

マニフェストへの署名については、「方法: アプリケーション マニフェストおよび配置マニフェストに署名する」を参照してください。

関連項目

厳密な名前付きアセンブリ
厳密名アセンブリ (アセンブリ署名) (C++/CLI)