4

最近、コード署名証明書を購入し、自動ビルドにコード署名ステップを組み込んでいます。

ビルド スクリプトは VB6 プロジェクトと .NET プロジェクトの両方をビルドする必要があるため、現在、すべてをビルドするバッチ ファイルがあります。.NET プロジェクトの場合、ビルド スクリプトは MSBUILD を呼び出し、ビルドするソリューション ファイルを渡します。これらのソリューションのプロジェクトにはいくつかのサードパーティの依存関係があり、これらのファイルはすべて、アプリケーションを実行するために必要であるため、 [参照設定] で [ローカルにコピー] オプションがオンになっています。さらに、一部のプロジェクトは COM Interop を使用するため、相互運用アセンブリ ( Interop.MSXML2.dllなど) が自動的に生成され、ビルド中に出力フォルダーにもコピーされます。

各アセンブリで個別にsigntool.exeを呼び出さなくても、ビルド中にコンパイルされたファイル (つまりアセンブリ) にコード署名し、サードパーティのライブラリと相互運用アセンブリを無視するだけの簡単なコードを見つけようとしています。 .

現在、ビルドスクリプトで次のことを行うことで、これを回避しました。

  • ビルドが以前にビルドされたすべてのファイルをクリーンアップすることを確認してください
  • ビルドの出力フォルダーを指定して、MSBUILD で .NET ソリューションをコンパイルします。
  • signtool.exeを使用して、出力フォルダー内のすべてのバイナリ (EXE、DLL、OCX) に再帰的に署名します。これにより、サードパーティのライブラリや自動生成された Interop アセンブリなど、すべてに署名されます
  • 私のサードパーティの依存関係は別のlibフォルダーにあるため、すべてのファイルをlibビルド出力フォルダーにコピーして、ビルドがそこにコピーしたコピーを上書きします。このようにして、これらのファイルは署名されなくなりますが、アセンブリはまだ署名されています

私の質問は、これを行うためのより良い方法はありますか? 私が考えることができる他の唯一の代替手段は、署名が必要な各アセンブリで個別にsigntool.exeを呼び出すことですが、プロジェクトの数とそれらで発生する変更の量 (アセンブリの名前が変更され、移動され、取得される) のために、これは苦痛になる可能性があります。プロジェクトが進展するにつれて削除されます)。さらに、特定のアセンブリが署名されているかどうかを推測する必要がないため、ファイルをループして一括で署名することが最も理にかなっています。

ただし、同時に、コード署名証明書を使用して作成していないファイルに任意に署名することは (道徳的、法的、またはその他の点で) 適切ではないようです。

それとも、私はこれについて完全に間違った方法で進んでいますか?

4

1 に答える 1

1

含めているすべてのライブラリを配布するライセンスを持っている場合は、それらにデジタル署名を追加することは問題になるとは思いません. インストーラーを作成する前に、すべてに署名するだけです。

とは言っても、ユーザーのマシンですべてに署名することにはいくつかの利点がありますが、署名する最も重要なことはインストーラーです。ほとんどのユーザーは、デジタル署名が軽減するのに役立つ恐ろしいメッセージを目にします。

ビルドに関しては、Visual Build Professional を使用してすべてのビルド プロセスを管理しています。これには、コピー時にすべてに署名するために使用する統合コード署名ステップがあります。私の最も長い展開プロジェクトは、合計で 300 を超えるステップであり、署名からアップロードまですべてを行います。私は Kinook とは関係がありませんが、このソフトウェアを宣伝しようとしています。1 週間の勤務時間でどれだけの時間を節約できるか想像もつきません。

于 2011-07-07T18:19:46.647 に答える