7

を使用してドットネットexeに署名しています

signcode.exe with an spc/pvk combo

一部のデータを検証するために、ファイルは実行時に独自の公開鍵を読み取る必要があります。私はいくつかの異なる道を進んできました。

私はもう試した

X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe);

その場合、executeingCertはnullになります。サインコードはX509署名付きファイルを作成していないと思いますが、変更するスイッチがあれば、喜んでそのように進めます。

編集済み 上記は機能することがわかりました....ヌルチェックを逆方向に行いました(!=!= ==):)

Assembly asm = Assembly.GetExecutingAssembly();
string exe = asm.Location;
X509Certificate executingCert = X509Certificate.CreateFromSignedFile(exe); 

if (executingCert != null)
{
    Console.WriteLine("Assembly is signed");
    byte[] assemblyKey = executingCert.GetPublicKey();
}
4

2 に答える 2

3

SignCode(.Net 1.0および1.1の場合)はAuthenticode署名を使用しますが、私が知る限り、.NetFramework管理インターフェースがありません。このKB記事「AuthenticodeSignedExecutablesから情報を取得する方法」にあるようなWin32APIのルーチンを呼び出すには、P/Invokeを使用する必要がある可能性があります。おそらく、証明書を取得するCryptQueryObjectを使用する必要があります。その後、公開鍵を取得するための別のルーチンを見つける必要があります。

多くの答えがあるこの関連するStackOverflowの質問をチェックしてください:特定の署名をチェックするためのWinVerifyTrust?

于 2010-09-16T21:54:05.117 に答える
0

そのようなことを試してください:

Assembly.GetEntryAssembly().GetName().GetPublicKey()

その場合はGetEntryAssemblyを使用しましたが、もちろん、ロードされたアセンブリでメソッドを呼び出すことができます。

于 2010-09-16T06:16:39.673 に答える