アセンブリへの署名とGAC
1.目次
2.目的
注意
このセクションは、自分自身のためのメモです。
このあたりのアセンブリー、DLL地獄の解消、厳密名の署名などなどに関しては、とてもHPで説明しきれる内容ではないです。
また、下手に説明してしまうのも非常に危険な話なので、解説しません。
それぞれの環境ごとにやり方が異なってきますので、参考にしないでね。
厳密名アセンブリーにすることにより、改竄からプログラムを守ることができます。
厳密名署名されたアセンブリーを改竄すると、次のようなエラーが表示され、実行できなくなります。
本当にあなたが作ったアセンブリーであることを保証したい場合には、厳密名アセンブリーにするのがよいでしょう。
相当奥深い内容なので、頑張ってね^^;
3.参考
(1) MSDN/
.NET Framework を使った簡単な配置と DLL Hell の解決
(2) MSDN/
.NET Framework のための安全なコーディング ガイドライン
(3) MSDN/
Visual Studio .NET と Visual SourceSafe を使用したチーム開発
4.用語
用語 | 説明 |
CSP | Crypto Service Provider / 暗号サービス プロバイダ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\Defaults\Provider |
CSPコンテナ | 暗号サービス プロバイダ自体が管理するコンテナ |
5.キーペアの作成、および厳密名の署名
秘密鍵、公開鍵のキーペア作成
手順 |
処理 |
説明 |
Step 1 | キーペア(秘密鍵、公開鍵)を作成する。 | sn -k Uchukamen_Master.snk |
Step 2 | キーペアを CSP に格納する。 | sn -i Uchukamen_Master.snk Uchukamen_CSP |
注意 注意 注意 注意 注意 注意 注意 |
キーペアは、厳重に保管すること。 |
AssemblyInfo.cs の設定
手順
|
処理
|
説明
|
Step 1
|
AssemblyInfo.cs の一般情報を確認する。
|
[assembly: AssemblyTitle("アセンブリーのタイトル")] [assembly: AssemblyDescription("アセンブリーの説明")] [assembly: AssemblyConfiguration("アセンブリ構成情報")] [assembly: AssemblyCompany("Uchukamen")] [assembly: AssemblyProduct("製品名")] [assembly: AssemblyCopyright("Copyright (c)
2003 Uchukamen")] [assembly: AssemblyTrademark("Uchukamen")] [assembly: AssemblyCulture("")]
|
Step 2
|
AssemblyInfo.cs のバージョンを確認する。
|
[assembly: AssemblyVersion("1.0.*")]
|
Step 3
|
AssemblyInfo.cs の署名を確認する。 CSP を利用する場合
|
[assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("")] [assembly: AssemblyKeyName("Uchukamen_CSP")]
|
AssemblyInfo.cs の署名を確認する。 キーペアを利用する場合
|
[assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile("..\\..\\Uchukamen_Master.snk")] [assembly: AssemblyKeyName("")]
|
注意 AssemblyCulture
|
通常は空文字列""
|
注意 Version <メジャー番号>.<マイナー番号>.<ビルド番号>.<リビジョン番号> ワイルドカード (*) を使用して、ビルド番号とリビジョン番号を自動的に生成できる。
|
バージョン
|
ガイドライン
|
補足
|
メジャー番号
|
下位互換性を想定できない製品のメジャー リリースなど。
|
手動で設定。
|
マイナー番号
|
下位互換性はあるが大幅な改良を行った場合など。
|
手動で設定。
|
ビルド番号
|
同一ソースの再コンパイルが行われた。例えば、プロセッサ、プラットフォーム、コンパイラなどが変更された場合。
|
*とした場合、2000年からの日数らしい
|
リビジョン番号
|
完全互換。前のリリースのアセンブリのセキュリティ ホールを修正する場合など。
|
*とした場合、リビジョン番号は深夜0時からの秒数÷2らしい
|
注意 Version
|
ビルド番号、リビジョン番号を手で設定することも可能だが、 同一のバージョン番号を持つdll がすでに GAC
に存在する場合、最新のdll はインストールされない。
|
その他メモ
項目
|
コマンド
|
公開鍵の取得: キーペアを利用
|
sn -p Uchukamen_Master.snk Uchukamen_Public.snk
|
公開鍵の取得: CSP を利用
|
sn -pc Uchukamen_CSP Uchukamen_Public.snk
|
逆アセンブラ
|
ILDASM.exe
|
6.GAC関連ツール
項目 | コマンド |
GACの管理(追加、削除など) | .Net Framework Configration コントロールパネル→管理ツール→.Net Framework Configration→マイコンピュータ→アセンブリキャッシュ
|
アセンブリの依存関係の確認 | .Net Framework Configration コントロールパネル→管理ツール→.Net Framework Configration→マイコンピュータ→アプリケーション
|
.NET Global Assembly Cache Utility | gacutil.exe コマンドラインツール。英語ベースで使いにくい。.Net Framework Configrationで十分。 |
その他メモ
項目
|
コマンド
|
GAC の格納場所
|
%windir%\assembly
|
アセンブリの命名規則
|
<会社名>.<テクノロジー名>.<カテゴリー名>.dll 例 Uchukamen.CSharp.Util.dll GAC に登録するには、ファイル名(".dll を除く")はアセンブリ名と一致している必要がある。 個人ベースなら、GACに登録することなんてありえないと思うけど、とりあえず。^^/~
|