次の方法で共有


アセンブリへの遅延署名

組織は、開発者が日常的にアクセスできない厳重に保護されたキー ペアを持つことができます。 公開キーは多くの場合使用できますが、秘密キーへのアクセスは少数の個人のみに制限されます。 厳密な名前を持つアセンブリを開発する場合、厳密な名前のターゲット アセンブリを参照する各アセンブリには、ターゲット アセンブリに厳密な名前を付けるために使用される公開キーのトークンが含まれます。 そのためには、開発プロセス中に公開キーを使用できる必要があります。

ビルド時に遅延署名または部分署名を使用して、厳密な名前署名用のポータブル実行可能ファイル (PE) ファイルの領域を予約できますが、実際の署名は後のステージ (通常はアセンブリを出荷する直前) まで延期できます。

アセンブリに遅延署名するには:

  1. 最終的な署名を行う組織から、キー ペアの公開キー部分を取得します。 通常、このキーは 、Windows SDK によって提供される厳密な名前ツール (Sn.exe) を使用して作成できる .snk ファイルの形式です。

  2. System.Reflectionの 2 つのカスタム属性を使用して、アセンブリのソース コードに注釈を付けます。

    • AssemblyKeyFileAttribute:公開キーを含むファイルの名前をパラメーターとしてコンストラクターに渡します。

    • AssemblyDelaySignAttributeは、遅延署名が、そのコンストラクターにパラメーターとして true を渡すことによって使用されていることを示します。

    例えば次が挙げられます。

    [assembly:AssemblyKeyFileAttribute("myKey.snk")];
    [assembly:AssemblyDelaySignAttribute(true)];
    
    [assembly:AssemblyKeyFileAttribute("myKey.snk")]
    [assembly:AssemblyDelaySignAttribute(true)]
    
    <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
    <Assembly:AssemblyDelaySignAttribute(True)>
    
  3. コンパイラは、アセンブリ マニフェストに公開キーを挿入し、完全な厳密な名前の署名用に PE ファイル内の領域を予約します。 このアセンブリを参照する他のアセンブリが独自のアセンブリ参照に格納するキーを取得できるように、アセンブリのビルド中に実際の公開キーを格納する必要があります。

  4. アセンブリに有効な厳密な名前の署名がないため、その署名の検証を無効にする必要があります。 これを行うには、厳密な名前ツールで -Vr オプションを使用します。

    次の例では、 myAssembly.dllというアセンブリの検証をオフにします。

    sn -Vr myAssembly.dll
    

    Advanced RISC Machine (ARM) マイクロプロセッサなど、厳密な名前ツールを実行できないプラットフォームで検証をオフにするには、 -Vk オプションを使用してレジストリ ファイルを作成します。 検証を無効にするコンピューター上のレジストリにレジストリ ファイルをインポートします。 次の例では、 myAssembly.dllのレジストリ ファイルを作成します。

    sn -Vk myRegFile.reg myAssembly.dll
    

    -Vr または -Vk オプションを使用すると、必要に応じてテスト キー署名用の .snk ファイルを含めることができます。

    Warnung

    セキュリティのために厳密な名前に依存しないでください。 一意の ID のみが提供されます。

    64 ビット コンピューター上の Visual Studio での開発時に遅延署名を使用し、 任意の CPU のアセンブリをコンパイルする場合は、 -Vr オプションを 2 回適用する必要があります。 (Visual Studio では、 任意の CPUプラットフォーム ターゲット ビルド プロパティの値です。コマンド ラインからコンパイルすると、それが既定値になります)。コマンド ラインまたはエクスプローラーからアプリケーションを実行するには、64 ビット バージョンの Sn.exe (厳密な名前ツール) を使用して、 -Vr オプションをアセンブリに適用します。 デザイン時にアセンブリを Visual Studio に読み込むには (たとえば、アセンブリにアプリケーション内の他のアセンブリで使用されるコンポーネントが含まれている場合)、厳密な名前のツールの 32 ビット バージョンを使用します。 これは、Just-In-Time (JIT) コンパイラは、コマンド ラインからアセンブリを実行するときにアセンブリを 64 ビットネイティブ コードにコンパイルし、アセンブリがデザイン時環境に読み込まれるときに 32 ビットネイティブ コードにコンパイルするためです。

  5. その後、通常は出荷の直前に、 -R オプションと厳密な名前ツールを使用して、実際の厳密な名前の署名のためにアセンブリを組織の署名機関に送信します。

    次の例では、sgKey.snk キー ペアを使用して、myAssembly.dll という名前のアセンブリに厳密な名前で署名します。

    sn -R myAssembly.dll sgKey.snk
    

こちらも参照ください