ここには明らかな何かが欠けているように感じますが、どこにも書かれていません。
私は Authenticode 証明書を使用して実行可能ファイルに署名していますが、それについてもう少し学び始めたので、そのままの値に疑問を抱いています。
- 署名された exe には、「有効な」証明書として示されるデジタル証明書があります。このようなファイルをインターネットからダウンロードすると、Xyz Corporation によって公開された安全でない可能性のある場所からプログラムを実行しようとしているという警告が Windows に表示されます。
- 署名がない場合、ダウンロードされたファイルは、ファイルが信頼されていないことを示すまったく異なる外観の警告ボックスを表示します。
さて、気になるのは:
署名付きの exe が変更されている場合、[プロパティ] > [デジタル署名] > [署名の選択] > [詳細...] に移動すると、「このデジタル署名は無効です」と表示されます。これは、重大な問題である可能性が高いものを表示するための非常にあいまいな方法であり、ファイルを実行してはならない大きな指標です。
- このファイルを (ダウンロードせずに) Windows から実行すると、正常に実行されます。何か問題があるという警告や兆候はありません
- ファイルをダウンロードして実行しようとするとどうなるかは確認していません。
( delcertを使用して) ファイルから署名を取り除いても、何か問題があるという兆候はありません。繰り返しますが、ファイルを実行できますが、プロパティ ダイアログに証明書が表示されません。
これをより便利にするために、署名されたファイルはそれ自体を検証する必要があると考えています。起動時に、有効な署名があること、および署名の sha1 フィンガープリントが Xyz Corporation 証明書の予期される署名と一致する可能性があることを確認する必要があります。
(確かに、これは誰かが証明書を削除してから、ファイルを編集して証明書チェックを削除する状況を処理しません)
これを行う方法について話している人を見つけることができません(少なくとも.NETではなく、私が期待するような単純なAPI呼び出しでは確かにそうではありません)-したがって、これはいくつかの質問につながります:
- 署名がチェックされない理由はありますか? このチェックなしで署名することには、他にどのような利点がありますか?
- 改ざん検出の手段として署名を検証しようとするのは無駄で、試す意味がありませんか?
- .NET で現在の実行可能ファイルの証明書を確認するにはどうすればよいですか?