[C#]アセンブリの厳密署名(FxCop:CA2209) | Assertion Failed!

[C#]アセンブリの厳密署名(FxCop:CA2209)

FxCop指摘の改修


マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!


前回 、Windowsフォームアプリケーションを作成した時点ででるwarningが3つあると説明した。


今回はコレの直し方。

(基本的にFxCopのDocuumentationに載っているが英語だし。。)


[warning①]

[Location not stored in Pdb] : warning CA2209 : Microsoft.Usage : No valid permission requests were found for assembly 'FxCopTest'. You should always specify the minimum security permissions using SecurityAction.RequestMinimum.


■指摘内容

アセンブリに最低限のセキュリティを指定する属性がみつかりません。

ので、指定しなさい。


■修正方法

アセンブリに署名を設定する。


「プロジェクトのプロパティ」→「署名」→「アセンブリの署名」→「厳密な名前キーの作成」

(パスワードはなくてもよい。名前は任意)


これにより、ソリューションエクスプローラ内に「***.snk」というファイルが生成される。


■説明

MSDNでは以下の説明がされている。

-------------------------------------------------------------------------------

アセンブリに厳密な名前で署名することにより、名前をグローバルに一意にすることができます。

具体的には、厳密な名前は次の要件を満たします。

  • 厳密な名前は、一意なキー ペアに依存することにより、名前の一意性を保証します。ある秘密キーを使用して生成されたアセンブリの名前は、別の秘密キーを使用して生成されたアセンブリの名前とは異なるため、同じアセンブリ名を元の秘密キーの所有者以外の人が生成することはできません。

  • 厳密な名前は、アセンブリのバージョン系統を保護します。厳密な名前を付けることにより、アセンブリの作成者以外の人が、そのアセンブリの後続バージョンを作成することはできなくなります。そのため、ユーザーが読み込んでいるアセンブリのバージョンの発行者が、アプリケーションのビルドに使用されたバージョンの発行者と同じであることが保証されます。

  • 厳密な名前を付けることで、厳密な整合性チェックが実行されます。.NET Framework のセキュリティ チェックにパスすることで、そのアセンブリの内容が作成されて以来変更されていないことが保証されます。ただし、厳密な名前そのものが、デジタル署名やサポートされている証明書によって実現されるのと同レベルの信頼性を示すわけではありません。

-------------------------------------------------------------------------------


簡単に言うと、アセンブリ(exeとかdll)にデジタル署名をくっつけましょう。

これにより、たとえアセンブリが解析されて改造されたものを公開されたとしても

オリジナルの署名は真似できないから作成元は保証されますよ、ってことだと思う。


作成された署名ファイル(*.snk)を見てみたらバイナリの羅列だったので何かしらの

暗号化がされてアセンブリにリンクされているのだと思うが詳しくはしらない。