Sn.exe (厳密名ツール)

更新 : 2011 年 4 月

厳密名ツール (Sn.exe) は、厳密な名前を使用してアセンブリに署名する場合に役立ちます。 Sn.exe には、キーの管理、署名の生成、署名の検査に関する各オプションが用意されています。

メモメモ

64 ビット コンピューターでは、Visual Studio コマンド プロンプトを使用して 32 ビット バージョンの Sn.exe を、Visual Studio x64 Win64 コマンド プロンプトを使用して 64 ビット バージョンを実行してください。

このツールは Visual Studio および Windows SDK と一緒に自動的にインストールされます。 このツールを実行するには、Visual Studio コマンド プロンプトまたは Windows SDK コマンド プロンプト (CMD シェル) を使用することをお勧めします。 これらのユーティリティを使用すると、インストール フォルダーに移動することなくツールを簡単に実行できます。 詳細については、「Visual Studio と Windows SDK のコマンド プロンプト」を参照してください。

  • コンピューターに Visual Studio がインストールされている場合は、タスク バーの [Start] ボタンをクリックし、[All Programs]、[Visual Studio]、[Visual Studio Tools]、[Visual Studio Command Prompt] の順にクリックします。

    または

    コンピューターに Windows SDK がインストールされている場合は、タスク バーの [Start] ボタンをクリックし、[All Programs]、Windows SDK のフォルダー、[Command Prompt] (または [CMD Shell]) の順にクリックします。

  • コマンド プロンプトに次のように入力します。

sn [-quiet][option [parameter(s)]]

パラメーター

オプション

説明

-c [csp]

厳密な名前による署名に使用する既定の暗号サービス プロバイダー (CSP: Cryptographic Service Provider) を設定します。 この設定は、コンピューター全体に適用されます。 CSP 名を指定しない場合は、現在の設定がクリアされます。

-d container

指定したキー コンテナーを厳密な名前 CSP から削除します。

-D assembly1 assembly2

2 つのアセンブリの違いが、署名だけかどうかを検査します。 通常は、このオプションは、別のキー ペアを使用してアセンブリに再署名した後のチェック用として使用されます。

-e assembly outfile

assembly から公開キーを抽出し、outfile に格納します。

-h

このツールのコマンド構文とオプションを表示します。

-i infile container

指定したキー コンテナーに、infile に含まれるキー ペアをインストールします。 キー コンテナーは厳密な名前 CSP 内に常駐します。

-k [keysize] outfile

指定したサイズの新しい RSACryptoServiceProvider キーを生成し、指定したファイルに書き込みます。 公開キーと秘密キーの両方がファイルに書き込みまれます。

キーのサイズを指定しない場合、Microsoft Enhanced Cryptographic Provider をインストールしている場合は既定で 1,024 ビットのキーが生成され、インストールしていない場合は既定で 512 ビットのキーが生成されます。

Microsoft Enhanced Cryptographic Provider をインストールしている場合、keysize パラメーターは、8 ビット間隔で 384 ビットから 16,384 ビットまでの長さのキーをサポートします。 Microsoft Enhanced Cryptographic Provider をインストールしていない場合は、8 ビット間隔で 384 ビットから 512 ビットまでの長さのキーをサポートします。

-m [y|n]

キー コンテナーがコンピューターに固有であるか、ユーザーに固有であるかを指定します。 y を指定した場合、キー コンテナーはコンピューターに固有です。 n を指定した場合、キー コンテナーはユーザーに固有です。

y も n も指定しない場合は、現在の設定が表示されます。

-o infile [outfile]

infile から公開キーを抽出し、.csv ファイルに格納します。 公開キーの各バイトはコンマで区切られます。 この形式は、ソース コード内で、キーへの参照を初期化済みの配列としてハードコーディングする場合に便利です。 outfile を指定しない場合、出力はクリップボードに保存されます。

メモメモ
このオプションでは、入力が公開キーのみであるかどうかの検証は行われません。infile に秘密キーとのキー ペアが格納されていた場合、秘密キーも抽出されます。

-p infile outfile

infile 内のキー ペアから公開キーを抽出し、outfile に格納します。 この公開キーは、アセンブリ リンカー (Al.exe)/delaysign+ オプションと /keyfile オプションを使用して、アセンブリへの署名を遅らせるときに使用できます。 アセンブリの署名を遅らせた場合、コンパイル時には公開キーだけが設定され、後で秘密キーが判明したときに追加される署名用にファイル内の領域が予約されます。

-pc container outfile

container 内のキー ペアから公開キーを抽出し、outfile に格納します。

-Pb [y|n]

厳密な名前を省略するポリシーが強制されるかどうかを指定します。 y を指定すると、完全に信頼されている AppDomain に完全信頼アセンブリが読み込まれるとき、アセンブリの厳密な名前の検証は行われません。 n を指定した場合は、厳密な名前が正しいかどうかのみ検証されますが、特定の厳密な名前については確認されません。 StrongNameIdentityPermission は、完全に信頼されているアセンブリには効果がありません。 厳密な名前の一致については、独自のチェックを実行する必要があります。

y も n も指定しない場合は、現在の設定が表示されます。 既定値は、y です。

メモメモ
64 ビット コンピューターでは、Sn.exe の 32 ビットのインスタンスと 64 ビットのインスタンスの両方にこのパラメーターを設定する必要があります。

-q[uiet]

クワイエット モードを指定します。このモードでは、成功メッセージは表示されません。

-R[aassembly infile

以前に署名したアセンブリ、または署名を遅らせたアセンブリに、infile 内のキー ペアを使用して再署名します。

-Ra を使用すると、アセンブリ内のすべてのファイルについてハッシュが再計算されます。

-Rc[aassembly container

以前に署名したアセンブリ、または署名を遅らせたアセンブリに、container 内のキー ペアを使用して再署名します。

-Rca を使用すると、アセンブリ内のすべてのファイルについてハッシュが再計算されます。

-Rh assembly

アセンブリ内のすべてのファイルについてハッシュを再計算します。

-t[p] infile

infile に格納されている公開キーに関するトークンを表示します。 infile には、以前に -p を使用してキー ペア ファイルから生成された公開キーが含まれている必要があります。 -t[p] オプションを使用して、トークンをキー ペア ファイルから直接抽出しないでください。

トークンは、ハッシュ関数によって公開キーから算出されます。 領域を節約するために、共通言語ランタイムは厳密な名前を持つアセンブリへの依存度を記録するときに、別のアセンブリへ参照の一部として公開キー トークンをマニフェスト内に格納します。 -tp オプションを指定すると、トークンの他に公開キーも表示されます。

このオプションはアセンブリ署名を検証しないため、信頼の決定には使用しないでください。 このオプションは、生の公開キー トークン データのみを表示します。

-T[p] assembly

assembly に関する公開キー トークンを表示します。assembly には、アセンブリ マニフェストを含むファイルの名前を指定する必要があります。

トークンは、ハッシュ関数によって公開キーから算出されます。 領域を節約するために、共通言語ランタイムは厳密な名前を持つアセンブリへの依存度を記録するときに、別のアセンブリへ参照の一部として公開キー トークンをマニフェスト内に格納します。 -Tp オプションを指定すると、トークンの他に公開キーも表示されます。

このオプションはアセンブリ署名を検証しないため、信頼の決定には使用しないでください。 このオプションは、生の公開キー トークン データのみを表示します。

-TSassembly infile

infile のキー ペアを使用して、assembly に署名または部分署名されている署名を検査します。

-TSc assembly container

キー コンテナー container のキー ペアを使用して、assembly に署名または部分署名されている署名を検査します。

-v assembly

assembly 内の厳密な名前を検査します。ここで、assembly はアセンブリ マニフェストを含むファイルの名前です。

-vf assembly

assembly 内の厳密な名前を検査します。-v オプションとは異なり、-vf では -Vr オプションで無効化した場合であっても、検査を強制的に実行します。

-Vl

コンピューター上の厳密な名前検査に関する、現在の設定を一覧表示します。

-Vr assembly [userlist] [infile]

検査をスキップする assembly を登録します。 オプションとして、コンマで区切られたユーザー名の一覧を指定できます。 infile を指定した場合、検査は実行されますが、検査時には infile 内の公開キーが使用されます。 指定した厳密な名前を持つアセンブリをすべて登録するには、*, strongname という形式で assembly を指定します。 strongname は、トークン化した形式の公開キーを表す 16 進形式の文字列として指定する必要があります。 公開キー トークンの表示については、-t オプションと -T オプションを参照してください。

Caution メモ注意
このオプションは開発時だけ使用します。検証省略リストにアセンブリを追加すると、セキュリティ上の脆弱性が生じます。悪意のあるアセンブリは、検証省略リストに追加されたアセンブリの完全限定アセンブリ名 (アセンブリ名、バージョン、カルチャ、および公開キー トークン) を使用することによって、その ID を偽装できます。これによって、悪意のあるアセンブリの検証も省略できます。

-Vu assembly

検査をスキップする assembly の登録を解除します。 -Vr オプションに適用される規則と同じアセンブリ名前付け規則が -Vu オプションにも適用されます。

-Vx

検査をスキップするエントリをすべて削除します。

-?

このツールのコマンド構文とオプションを表示します。

メモメモ

Sn.exe の全オプションでは大文字と小文字が区別されます。また、オプションが正しく認識されるためには、表記されたとおりに正確に入力する必要があります。

解説

-R オプションと –Rc オプションは、署名を遅らせたアセンブリを処理する場合に便利です。 その場合、コンパイル時には公開キーだけが設定され、後で秘密キーが判明したときに署名が実行されます。

メモメモ

レジストリなどの保護されたリソースに書き込むパラメーター (例: –Vr) の場合は、管理者として SN.exe を実行してください。

新しいランダム キー ペアを作成し、keyPair.snk に格納するコマンドを次に示します。

sn -k keyPair.snk

厳密な名前 CSP 内のコンテナー MyContainer 内の keyPair.snk にキーを格納するコマンドを次に示します。

sn -i keyPair.snk MyContainer

keyPair.snk から公開キーを抽出し、publicKey.snk に格納するコマンドを次に示します。

sn -p keyPair.snk publicKey.snk

公開キーおよび publicKey.snk に含まれている公開キーのトークンを表示するコマンドを次に示します。

sn -tp publicKey.snk

アセンブリ MyAsm.dll を検査するコマンドを次に示します。

sn -v MyAsm.dll

既定の CSP から MyContainer を削除するコマンドを次に示します。

sn -d MyContainer

参照

参照

Al.exe (アセンブリ リンカー)

Visual Studio と Windows SDK のコマンド プロンプト

概念

厳密な名前付きアセンブリ

その他の技術情報

.NET Framework ツール

履歴の変更

日付

履歴

理由

2011 年 4 月

Visual Studio と Windows SDK のコマンド プロンプトの使用に関する情報を追加。

情報の拡充

2010 年 8 月

64 ビット コンピューターでのツールの実行に関する情報を追加。

情報の拡充