アセンブリ署名の例

次の例では、アセンブリ マニフェスト、検証カタログ、およびアセンブリ ファイルで構成される署名付きサイドバイサイド アセンブリを生成する方法について説明します。 共有サイド バイ サイド アセンブリに署名する必要があります。 オペレーティング システムは、共有アセンブリをグローバル サイド バイ サイド ストア (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 形式にエクスポートできます。 PVK Digital Certificate Files Importer の詳細については、MSDN ライブラリの「展開リソース」セクションを参照するか、証明機関にお問い合わせください。

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