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

厳密な名前の署名により、ソフトウェア コンポーネントはグローバル一意識別子 (GUID) を付与されます。Strong-name signing gives a software component a globally unique identity. 厳密な名前を使用すると、別のユーザーによるアセンブリのなりすましが不可能になることが保証され、コンポーネントの依存関係と構成ステートメントが、適切なコンポーネントとコンポーネントのバージョンに確実に対応付けられます。Strong names are used to guarantee that the assembly cannot be spoofed by someone else, and to ensure that component dependencies and configuration statements map to the correct component and component version.

厳密な名前は、アセンブリの識別子 (単純テキスト名、バージョン番号、カルチャ情報)、公開キー トークン、およびデジタル署名で構成されます。A strong name consists of the assembly's identity (simple text name, version number, and culture information), plus a public key token and a digital signature.

Visual Basic プロジェクトと C# プロジェクトのアセンブリへの署名については、「厳密な名前付きアセンブリの作成と使用」を参照してください。For information about signing assemblies in Visual Basic and C# projects, see Creating and Using Strong-Named Assemblies.

Visual C++ プロジェクトのアセンブリへの署名については、「厳密名アセンブリ (アセンブリ署名) (C++/CLI)」を参照してください。For information about signing assemblies in Visual C++ projects, see Strong Name Assemblies (Assembly Signing) (C++/CLI).

注意

厳密な名前の署名は、アセンブリのリバース エンジニアリングに対して保護されません。Strong-name signing does not protect against reverse-engineering of the assembly. リバース エンジニアリングに対して保護する方法については、「Dotfuscator Community Edition (CE)」を参照してください。To protect against reverse-engineering, see Dotfuscator Community Edition (CE).

アセットの型と署名Asset Types and Signing

.NET のアセンブリとアプリケーション マニフェストに署名することができます。You can sign .NET assemblies and application manifests. 次に例を示します。These include the following:

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

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

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

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

次の種類のアセットに署名する必要があります。You must sign the following types of asset:

  1. アセンブリ - アセンブリをグローバル アセンブリ キャッシュ (GAC: Global Assembly Cache) に配置する場合。Assemblies, if you want to deploy them to the global assembly cache (GAC).

  2. ClickOnceClickOnce のアプリケーション マニフェストと配置マニフェスト。 application and deployment manifests. Visual Studio では、これらのアプリケーションに対する署名が既定で有効になります。Visual Studio enables signing by default for these applications.

  3. COM 相互運用のために使用されるプライマリ相互運用機能アセンブリ。Primary interop assemblies, which are used for COM interoperability. TLBIMP ユーティリティは、COM タイプ ライブラリからプライマリ相互運用機能アセンブリを作成するときに、厳密な名前付けを強制的に適用します。The TLBIMP utility enforces strong-naming when creating a primary interop assembly from a COM type library.

一般に、実行可能ファイルに署名する必要はありません。In general you should not sign executables. 厳密な名前付きコンポーネントは、アプリケーションと共に配置される、厳密な名前を持たないコンポーネントを参照することはできません。A strongly-named component cannot reference a non-strongly-named component that is deployed with the application. Visual Studio は、アプリケーションの実行可能ファイルに署名しませんが、厳密な名前を持たない実行可能ファイルを指すアプリケーション マニフェストに署名します。Visual Studio does not sign application executables, but instead signs the application manifest, which points to the weak-named executable. 署名を行うと、依存関係を管理しにくくなります。そのため、一般的に、アプリケーションにとってプライベートなコンポーネントに署名することは避けてください。You should generally avoid signing components that are private to your application, because signing can make it more difficult to manage dependencies.

Visual Studio 内でアセンブリに署名する方法How to Sign an Assembly in Visual Studio

[署名] タブを使用してアプリケーションまたはコンポーネントに署名するには、プロジェクトのプロパティ ウィンドウに移動 (ソリューション エクスプローラーでプロジェクト ノードを右クリックして [プロパティ] をクリックするか、[クイック起動] ウィンドウにプロジェクトのプロパティを入力するか、ソリューション エクスプローラー ウィンドウ内で Alt キーを押しながら Enter キーを押す) します。You sign an application or component by using the Signing tab of the project properties window (right-click the project node in the Solution Explorer and select Properties, or type project properties in the Quick Launch window, or press ALT+ ENTER inside the Solution Explorer window). [署名] タブを選択し、[アセンブリの署名] チェック ボックスをオンにします。Select the Signing tab, then select the Sign the assembly check box.

キー ファイルを指定します。Specify a key file. 新しいキー ファイルを作成する場合は、新しいキー ファイルは必ず .pfx ファイル形式で作成されることに注意してください。If you choose to create a new key file, note that new key files are always created in the .pfx format. 新しいファイルの名前とパスワードが必要です。You need a name and password for the new file.

警告

キー ファイルは常にパスワードで保護して、第三者が使用できないようにする必要があります。You should always protect your key file with a password to prevent someone else from using it. プロバイダーまたは証明書ストアを使用して、キーを保護することもできます。You can also secure your keys by using providers or certificate stores.

また、既に作成したキーを指定することもできます。You can also point to a key you have already created. キーの作成の詳細については、「方法 : 公開キーと秘密キーのキー ペアを作成する」を参照してください。For more information about creating keys, see How to: Create a Public-Private Key Pair.

公開キーのみにアクセスできる場合は、遅延署名を使用して、キーの割り当てを遅延させることができます。If you have access only to a public key, you can use delay signing to defer assigning the key. [遅延署名のみ] チェック ボックスをオンにすると、遅延署名が有効になります。You enable delay signing by selecting the Delay sign only check box. 遅延署名されたプロジェクトは実行されず、デバッグすることもできません。A delay-signed project won't run, and you can't debug it. ただし、Sn.exe (厳密名ツール)-Vr オプションを指定すると、開発時に検証をスキップできます。However, you can skip verification during development by using the Sn.exe (Strong Name Tool) with the -Vr option.

マニフェストへの署名については、「方法: アプリケーション マニフェストおよび配置マニフェストに署名する」を参照してください。For information about signing manifests, see How to: Sign Application and Deployment Manifests.

参照See Also

厳密な名前付きアセンブリ Strong-Named Assemblies
厳密名アセンブリ (アセンブリ署名) (C++/CLI)Strong Name Assemblies (Assembly Signing) (C++/CLI)