問題タブ [winverifytrust]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
certificate-revocation - CRL からのみ失効リストを確認する方法は?
WinVerifyTrust を使用してファイルの署名を検証しています。
インターネットへの接続が非常に悪いため、ローカル キャッシュのみを確認したい。
問題は、 WinTrustDataでパラメーターを設定する方法について混乱していることです。
fdwRevocationChecksについて- ドキュメントは次のとおりです。
WTD_REVOKE_NONE フラグが WinVerifyTrust 関数の pgActionID パラメータで設定された HTTPSPROV_ACTION 値と組み合わせて使用される場合、追加の失効チェックは行われません。コード署名の検証時に WinVerifyTrust 関数がネットワーク取得を試行しないようにするには、dwProvFlags パラメータで WTD_CACHE_ONLY_URL_RETRIEVAL を設定する必要があります。
「追加の失効チェックなし」とは何を意味しますか? また、何に加えて? CRL を使用して失効チェックを行いますか? このフィールドを *WTD_REVOKE_WHOLECHAIN* に設定すると、オンラインでもチェックされますか?
WTD_CACHE_ONLY_URL_RETRIEVAL を設定すると、インターネットから失効リストを取得しようとしないことを確認するのに十分ですか?
結論: CRL チェックがあることを確認する方法はありますが、オンライン チェックはありません。
ありがとう
winapi - WinVerifyTrust は、MSI カスタム アクションの一部として実行されると、Windows ドライバー検証ポリシーを使用します
ファイルの署名を検証する (c++ win32 api) コードがいくつかあります。ActiveX と MSI のカスタム アクションで同じコードが実行されます。
ActiveX の一部として実行するとチェックは成功しますが、MSI のカスタム アクションの一部として実行すると検証に失敗します。
私はsigntool.exeを使用してファイルをチェックしました。したがって、/pa フラグがないと、検証は失敗します。何らかの理由で、ActiveX で実行された場合は既定の認証検証ポリシーが使用され、MSI のカスタム アクションで実行された場合は Windows ドライバー検証ポリシーが使用されると思います。
MSI で機能させる方法はありますか?
ありがとうザキー
windows - winverifytrust メモリリーク
winverifytrust のカタログ署名について質問がありました。winverifytrust を使用しており、呼び出し後に WTD_ACTION_STATE_CLOSE を呼び出しません。hWVTStateData が NULL でない場合にのみ呼び出します。私たちが見ているのは、システムのメモリ消費量が急増し続けていることです
消費は上昇し、安定状態に落ち着いた後、しばらくして再び上昇し、さらに長い期間を経て、より大きな金額で再び上昇します。これは、カタログ署名信頼 API によって行われる内部キャッシュの副作用であると考えられます。誰かが動作を確認するのを手伝ってくれますか
これは予想される動作ですか?
API の使い方 (無条件に STATE_ACTION_CLOSE を呼び出さないこと) は正しいですか?
内部キャッシングはこのように動作しますか? その場合、キャッシュ サイズが特定の制限を超えて増加しない安定した状態に達する場合、その制限を予測できますか?
参考までに、Executable の Authenticode 署名を検証中にメモリ リークのトピックを見ましたか? 同様に、そこでの議論は決定的なものではなく、カタログの署名とは関係がありませんでした。したがって、新しい質問
c++ - Windows 8 で mmc.exe からデジタル署名を取得する
mmc.exe (サービス) 署名を検証しようとするアプリケーションがあります。(アプリケーションのコンテキストは無関係だと思います) WinVerifyTrust で両方とも失敗する winapi 関数を試しています。カタログからの検証で TRUST_E_BAD_DIGEST を取得し、ファイル情報からの検証で TRUST_E_NOSIGNATURE を取得します。私の関数はwin7、XPでは成功しますが、win8では失敗することに言及することは非常に重要です。
これは関数のコード スニペットです。
この関数でwin7からwin 8に変更されたとは思わないので、何がうまくいかないのでしょうか?
アップデート
私の機能はwin 8のタスクマネージャーでは機能することに気付きましたが、mmcでは機能しません。
c++ - WinVerifyTrust エラー コードの処理
私は、ユーザーのシステムにインストールした後、サード パーティ企業の特定の DLL が改ざんされていないかどうかを判断する任務を負っています。私はこれまでデジタル署名に関連することをしたことがありません。WinVerifyTrust を使用して自分のシステムでテストをセットアップしようとしています。
これは 0x57 を返しています。MSDNから収集したものから、エラーは提供された信頼プロバイダーから発生します。信頼プロバイダーが何であるか、またはそれが返す可能性のあるエラー メッセージはよくわかりません。
- WinTrust.dll と WinTrust.lib にリンクしたので、Microsoft の「Software Publisher Trust Provider」を使用していると推測します。これは推奨されていますか、それとももっと良いものがありますか? 分析している製品のソフトウェア発行者に固有のものを使用する必要がありますか?
- SoftPub.h には GUID 入力値が含まれていますが、出力エラー コードが提供されていないようです。応答コード リストを追跡するための助けをいただければ幸いです。
前もって感謝します。
編集:以来、このライブラリは winerror.h によって提供されるエラー コードを使用することがわかりました。0x57 は「ERROR_INVALID_PARAMETER」なので、何が不満なのかを調べています。また、ポリシー GUID を WINTRUST_ACTION_GENERIC_VERIFY_V2 に切り替えてみましたが、エラー TRUST_E_SUBJECT_FORM_UNKNOWN が返されました。どちらのエラー コードも、最終的な問題が何であるかを特に明らかにするものではありません。
編集 2:問題の dll で Microsoft の SignTool.exe も実行し、次の出力を得ました。
そのため、使用している信頼プロバイダーを変更する必要があるようです。ソフトウェアの製造元と話し合った結果、別のアプローチを採用することになり、このタスクは取り下げられました。
c# - C# でデジタル署名された vbscript を検証する
WinVerifyTrust を使用して C# で署名された vbscript を検証するためのサンプル コードが必要です。
MS ごとに - vbscript に署名できます - https: //technet.microsoft.com /en-us/library/ee176795.aspx
C で記述された msdn から例を取得し、改ざんの検出に成功しました。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa382384(v=vs.85).aspx
C コードは改ざんを正常に検出しますが、pinvoke.net と MS コード ギャラリーの両方の例を使用して C# で記述された同様のコードは、0x800b0100 という結果で失敗します。WTDProvFlags、dwStateAction などの値を変更して、C# コードのさまざまなバリエーションを試しましたが、成功しませんでした。
これは、CSCCreateCabinet プロジェクトを変更し、スクリプトを検証する関数をハッキングした 1 つの試みです ---
そして、これがNativeMethods.csクラスファイルです
助言がありますか?
certificate - WinVerifyTrust は、有効な (読み込まれた) ドライバーに対して CERT_E_UNTRUSTEDROOT を返します。
次のコード スニペットでは、WinVerifyTrust は、システムに読み込まれて実行されているカーネル ドライバー ファイル (.sys) に対して CERT_E_UNTRUSTEDROOT を返します。
いくつかの興味深い点: - ドライバーは、SHA-256 を使用して有効な (購入した) 証明書で署名されています。- KB3033929 がシステムにインストールされている (Win7/32) - ファイルのプロパティから証明書を表示すると、証明書チェーン全体が有効であると表示される
WinVerifyTrust の呼び出しは間違っていますか?
別の質問: SHA-256 ベースのコード署名検証がターゲット システムで利用可能であることを (レジストリ キーなどの存在によって) 知る別の方法はありますか? (インストール中にこれを確認する必要があります...)
ありがとう :)
windows - WinVerifyTrust() と WinVerifyTrustEx() の違いは何ですか?
MSDN はWinVerifyTrust()
およびWinVerifyTrustEx()
関数を文書化していますが、それらの違いが何であるかはあまり明確ではありません。
関数のシグネチャは、最後のパラメーターを除いて同じです。
ただし、LPVOID pWVTData
パラメーター toWinVerifyTrust()
は、実際には次のWINTRUST_DATA*
ようになり WinVerifyTrustEx()
ます。
pWVTData [入力]
WINTRUST_DATA 構造体としてキャストされたときに、信頼プロバイダーが指定されたアクション識別子を処理するために必要な情報を含むポインター。
私は他の違いを探すために 2 つのドキュメント ページを比較しました。ここに私が見つけたものを示します。
WinVerifyTrust()
:
サブジェクトが指定されたアクションに対して信頼されていることを信頼プロバイダーが検証しない場合、関数は信頼プロバイダーからステータス コードを返します。注: 戻り値は、前述の HRESULT ではなく、LONG です。関数が成功したかどうかを判断するために、SUCCEEDED などの HRESULT マクロを使用しないでください。代わりに、戻り値がゼロに等しいかどうかを確認してください。
備考
WinVerifyTrust 関数を使用すると、アプリケーションは信頼プロバイダーを呼び出して、指定されたオブジェクトが指定された検証操作の基準を満たしていることを検証できます。pgActionID パラメータは検証操作を識別し、pWinTrustData パラメータは信頼を検証するオブジェクトを識別します。トラスト プロバイダーは、オペレーティング システムに登録されている DLL です。WinVerifyTrust への呼び出しは、指定されたアクション識別子をサポートする登録済みの信頼プロバイダーが存在する場合、その呼び出しをその信頼プロバイダーに転送します。
たとえば、Software Publisher Trust Provider は、実行可能イメージ ファイルが信頼できるソフトウェア発行元からのものであり、ファイルが発行されてから変更されていないことを確認できます。この場合、pWinTrustData パラメーターは、ファイルの名前とファイルの種類 (Microsoft Portable Executable イメージ ファイルなど) を指定します。
各信頼プロバイダーは、評価できる特定の一連のアクションをサポートしています。各アクションには、それを識別する GUID があります。信頼プロバイダーは任意の数のアクション ID をサポートできますが、2 つの信頼プロバイダーが同じアクション ID をサポートすることはできません。
この関数を使用してポータブル実行可能 (PE) ファイルの署名を検証する方法を示す例については、「サンプル C プログラム: PE ファイルの署名を検証する」を参照してください。
WinVerifyTrustEx()
:
この関数には関連するインポート ライブラリがありません。Wintrust.dll に動的にリンクするには、LoadLibrary および GetProcAddress 関数を使用する必要があります。
WINTRUST_ACTION_GENERIC_CERT_VERIFY
証明書チェーンのみを検証します。これは、WinVerifyTrust 入力構造で証明書コンテキストを渡す場合にのみ有効です。
注: この関数を使用して証明書の検証を実行することはお勧めしません。証明書の検証を実行するには、CertGetCertificateChain および CertVerifyCertificateChainPolicy 関数を使用します。信頼プロバイダーが、サブジェクトが指定されたアクションに対して信頼されていることを確認した場合、戻り値は ERROR_SUCCESS です。それ以外の場合、関数は信頼プロバイダーからステータス コードを返します。
テストとして、リストされているサンプル プログラムを代わりWinVerifyTrust()
に使用するように変更しました。WinVerifyTrustEx()
どちらの API 呼び出しでも同じ結果が得られます。
誰かがこれら 2 つの機能に精通しており、それらの実際の違いを知っている場合は、洞察をいただければ幸いです。