(Visual takenStudio 2005で)引き継いだいくつかのC#コードで、アセンブリがすべて同じ.snk
ファイルで署名されていることに気付きました。
前の作者がこの方法でアセンブリに署名したのはなぜですか?
彼は、すべてのアセンブリに同じキーで署名することを望んでいたかもしれません。
アセンブリに署名する必要がありますか?また、署名しないと何が問題になりますか?
いいえ、必須ではありませんが、アセンブリの信頼性を確保できるメカニズムです。これにより、アセンブリが改ざんされていないこと、および実際にこの作成者からのものであることを確認できます。 GACに配置する場合にも必要です。
アセンブリの署名にはどのような欠点がありますか?それは遅延を引き起こしますか?
署名済みアセンブリは、他の署名済みアセンブリのみをロードできます。また、特定のバージョンに関連付けられているため、異なるバージョンを使用する場合は、バインディングリダイレクトを使用するか、アプリケーションを再コンパイルする必要があります。署名の検証により、パフォーマンスのオーバーヘッドも少しありますが、心配する必要がないほど小さいです。
[〜#〜] gac [〜#〜] に配置する場合は、アセンブリに署名する必要があります。
実行可能ファイルに署名する場合、それがリンクするクラスライブラリも署名する必要があります。サードパーティのライブラリを使用している場合(特に ActiveX コントロールなどを使用する必要がある場合)、これは困難です。
リチャード・グリムズは 。NET でセキュリティに関する良いワークショップを書いており、これに関する章が含まれています:セキュリティワークショップ
すべてのアセンブリが同じ.snkファイルで署名されている理由は、コードカバレッジで単体テストを使用した場合です。 (少なくともテストバージョンのVisual Studio 2005に組み込まれているツールで)コードカバレッジを実行できるようにするには、アセンブリに署名する場合、署名に使用する.snkファイルを指定する必要がありますが、ソリューション全体に対して1つの.snkファイルを指定します。したがって、さまざまなクラスライブラリに異なる.snkファイルで署名する場合、一度に1つのファイルのコードカバレッジのみをチェックできます。
アセンブリに署名する非常に重要な理由は、それがアセンブリであることを確認できるようにするためです。秘密鍵はあなたのものであるため、他の誰も同じ鍵でアセンブリに署名することはできません。つまり、アセンブリの公開キーが既知の場合(GetType().Assembly.GetName().GetPublicKey()
関数を使用して取得できます)、アセンブリは自分のものであり、改ざんされていません。
既存の回答に加えて、DLLがサードパーティソフトウェアによって動的にロードおよび消費されるときの署名をmust useに追加します。それ自体は技術的な要件ではありませんが、サードパーティのソフトウェアプロデューサーがセキュリティ上の懸念によりこのようなポリシーを実施することは合理的であり、したがって非常に一般的です。
アセンブリに署名する必要がある例:
Dllの署名のすべての使用法にもかかわらず、dllは2つの理由だけで署名されるべきです
1。バージョン管理
2。認証
a。バージョニングは、dllがどのバージョンでビルドされているかを示し、それらをGACにプッシュしている間、同じ名前の2つのdllが存在できますが、異なるバージョンです
b。認証は、dllが改ざんされておらず、作成時に同じものが存在するかどうかを示します。
基本とdllの署名について詳しく知りたい場合は、 here を参照してください。
署名とアセンブリは重要です。そのPCにのみインストールされているexeまたはアセンブリを確認するため。
つまり、そのフォルダをコピーして別のPCに入れると機能しません。そのマシンのみにそのアセンブリにサインインしているためです。