アセンブリ署名の例

次の例では、アセンブリ マニフェスト、検証カタログ、およびアセンブリ ファイルで構成される署名付きのサイド バイ サイド アセンブリを生成する方法について説明します。 共有サイド バイ サイド アセンブリに署名する必要があります。 オペレーティング システムは、共有アセンブリをグローバル サイド バイ サイド ストア (WinSxS) にインストールする前に、アセンブリ署名を検証します。 これにより、サイド バイ サイド アセンブリの発行元のスプーフィングが困難になります。

アセンブリ カタログの生成後にアセンブリ ファイルまたはマニフェストの内容を変更すると、カタログとアセンブリが無効になります。 カタログの作成と署名後にアセンブリ ファイルまたはマニフェストを更新する必要がある場合は、アセンブリに再度署名し、新しいカタログを生成する必要があります。

アセンブリ ファイル、アセンブリ マニフェスト、およびアセンブリの署名に使用する証明書ファイルから始めます。 証明書ファイルは 2048 ビット以上である必要があります。 信頼された証明書を使用する必要はありません。 証明書は、アセンブリが破損されていないことを確認するためにのみ使用されます。

Microsoft Windows ソフトウェア開発キット (SDK) で提供されている Pktextract.exe ユーティリティを実行して、証明書ファイルから公開キー トークンを抽出します。 Pktextract が正常に動作するには、証明書ファイルがユーティリティと同じディレクトリに存在する必要があります。 抽出された公開キー トークン値を使用して、マニフェスト ファイル内の assemblyIdentity 要素の publicKeyToken 属性を更新します。

MySampleAssembly.manifest という名前のマニフェスト ファイルの例を次に示します。 MySampleAssembly アセンブリには、MYFILE.DLL ファイルが 1 つだけ含まれています。 assemblyIdentity 要素の publicKeyToken 属性の値が公開キー トークンの値で更新されていることに注意してください。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"/>
</assembly>

次に、Windows SDK で提供されている Mt.exe ユーティリティを実行します。 アセンブリ ファイルは、マニフェストと同じディレクトリに配置する必要があります。 この例では、これは MySampleAssembly ディレクトリです。 例として Mt.exe を次のように呼び出します。

c:\ MySampleAssembly>mt.exe -manifest MySampleAssembly.manifest -hashupdate -makecdfs

Mt.exe を実行した後のマニフェストの例を次に示します。 hashupdate オプションを指定して Mt.exe を実行すると、ファイルの SHA-1 ハッシュが追加されます。 この値を変更してはいけません。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name=" Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"
hash="a1d362d6278557bbe965a684ac7adb4e57427a29" hashalg="SHA1"/>
</assembly>

-makecdfs オプションを指定して Mt.exe を実行すると、マニフェストの検証に使用されるセキュリティ カタログの内容を記述する MySampleAssembly.manifest.cdf という名前のファイルが生成されます。

次の手順では、この .cdf に対して Makecat.exe を実行して、アセンブリのセキュリティ カタログを作成します。 この例の Makecat.exe の呼び出しは次のようになります。

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

最後の手順では、SignTool.exe を実行して、証明書を使用してカタログ ファイルに署名します。 これは、前の手順で公開キー トークンを生成するために使用されたものと同じ証明書である必要があります。 SignTool.exe の詳細については、「SignTool」トピックを参照してください。 この例の SignTool の呼び出しは次のようになります。

c:\MySampleAssembly>signtool sign /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

認証済みのデジタル証明書があり、証明機関が PVK ファイル形式を使用して秘密キーを格納している場合は、PVK Digital Certificate Files Importer (pvkimprt.exe) を使用して、暗号化サービス プロバイダー (CSP) にキーをインポートできます。 このユーティリティを使用すると、業界標準の PFX/P12 形式にエクスポートできます。

署名されたファイルとカタログの作成」も参照してください。