web-dev-qa-db-ja.com

Windowsバッチ(.bat)ファイルに署名する方法は?

Windows 7を実行していますが、バッチファイルを実行しようとすると、「発行元を確認できませんでした。このソフトウェアを実行してもよろしいですか?」と表示されます。

そのため、コード署名証明書を使用して署名しようとすると、「SignToolエラー:このファイル形式は認識されないため、署名できません」と表示されます。

だから私は岩と固い場所の間に立ち往生しています。どちらかのメッセージを削除する方法はありますか?

screenshot

8
user41608

ネットワーク上の場所からバッチファイル(または他の実行可能ファイル)を実行すると、同様のメッセージが表示されます。この場合は、ローカルドライブに移動することを検討してください。もう1つの方法は、ローカルドライブで個別のバッチファイルを使用して、ネットワーク上で起動することです。起動するバッチファイルには、次の1行だけが必要です。

@call \\network\folder\batch.bat

Windowsはローカルファイルを処理しません。そのファイルが実行されると、問題なくネットワークバージョンを呼び出すことができます。

4
techturtle

バッチファイルには署名しません。バッチファイルが署名する必要のある何かを呼び出しているようです。

編集:バッチファイルを投稿したので、ネットワークの場所が原因であることがわかります。または、単にネットワーク上の場所からファイルをコピーした場合に発生することがあります。後者の場合、Windowsが代替データストリームを介してファイルを他のインターネットゾーンにあるようにタグ付けしたためです。次の2つの方法のいずれかを回避できます。

  1. Internet Explorerのイントラネットゾーンのセキュリティゾーンを変更します。
  2. Typeコマンドを使用して、ファイルの代替データストリームを破棄します。 (Sysinternalsからそれを実行できるstreams.exeもあります。)type thefile.bat > %temp%\newfile.bat & type %temp%\newfile.bat > thefile.bat
4
Mark Allen

表示されているのは、ダウンロードされたファイルをいつでも開こうとすると、Windowsが提供する一般的なプロンプトです。ファイルをダウンロードすると、インターネットから送信されたものであり、潜在的に危険であることを示すフラグがタグ付けされます。このようなファイルを実行しようとすると、Windowsは、信頼できるかどうかを判断するために、有効な署名があるかどうかを確認します。

あなたができることは、ファイルのプロパティでnblockボタンを使用してファイルからフラグを取り除くことです。その後、Windowsはそれを実行しようとするときはいつでもあなたを放っておいてくれます:

enter image description here


問題は、バッチファイルが実行可能なテキストファイルであるということです。テキストファイルに署名することは可能ですが、ファイルにバイナリデータの束を追加することになります。これは、バッチファイルの場合、意味不明であり、コマンドインタープリターが実行しようとすると問題が発生するため、問題になります。署名が破損するため、署名をコメント化しても機能しません。

したがって、バッチファイルへの署名は機能しません。

あなたがする必要があるのは、それを実行しようとするときにシステムがあなたにプロンプ​​トを出す理由を理解することです。デフォルトでは、Windowsはバッチファイルを実行する前に確認を求めないため、特別なポリシーまたはセキュリティプログラムでブロックする必要があります。セキュリティプログラムをチェックして、無効にしたり除外を追加したりできる検証設定があるかどうかを確認します。

また、バッチファイルの内容をチェックして、署名されていない実行可能ファイルが実行されているかどうかを確認します(ただし、デフォルトでは、Windowsは、ダウンロードされたか、昇格された特権を必要としない限り、実行可能ファイルのプロンプトを表示しません。設定を確認してください)。

3
Synetech

.batファイルをPowerShellスクリプトに変換することもできます。signtoolはこれらのファイルへの署名をサポートしています。

0
Emmanuel Bourg