5

DLL に署名するための自己生成証明書を作成しました。この DLL を C++ アプリケーションにロードすると、WinVerifyTrust API を使用して、コード署名証明書が有効かどうかを検証できます。

しかし、DLL が私の証明書の 1 つによって署名されていることを検出する方法を見つけることができません。CryptQueryObject API を使用しても、有用な情報は見つかりません。

誰もこれを行う方法について考えを持っていますか? それともイベント可能ですか?

ありがとうございました

4

3 に答える 3

1

CryptVerifyCertificateSignatureはあなたが望むものではありませんか?

于 2009-01-28T04:49:35.450 に答える
0

秘密鍵を使用して証明書に署名した場合、証明書は公開鍵でのみ検証できます。これが公開鍵暗号のしくみです。公開鍵を使用して署名を検証できる場合は、対応する秘密鍵を使用して署名したに違いないことがわかります

于 2009-01-29T02:48:53.320 に答える
0

Bill Zeller が示したものよりも前のバージョンの Windows でも動作するバージョンが必要な場合は、次を使用できます。

  1. CryptQueryObject一緒に使うCERT_QUERY_OBJECT_FILE
  2. 前回の通話で受け取ったで使用CryptMsgGetParamしますCMSG_SIGNER_CERT_INFO_PARAMHCRYPTMSG
  3. CertCompareIntegerBlob既知の(証明書)シリアル番号(またはループ内の番号)をファイル内のシリアル番号と比較するために使用します

既知のシリアル番号のいずれかが一致すれば完了です。すべての比較が失敗した場合、それはあなたの証明書ではありません。

注:ファイル プロパティ ダイアログで証明書のシリアル番号を確認すると、そこに表示されるバイトは、 から取得したPCERT_INFO( CERT_INFO::SerialNumber) の内容と比較すると逆の順序で表示されますCryptMsgGetParam。そのため、比較する前に、独自のシリアル番号を逆にして保存するか、それらを逆にしてください。

また、注意してください:WinVerifyTrustコード署名を完全に信頼できるものと見なすためには、証明書を信頼できるものとしてインストールする必要があります。使用されたのが自分の証明書であることを確認する方法についての部分を説明しました。

于 2012-08-20T20:30:48.430 に答える