0

良い一日、

Crypto Api 関数 CryptRetrieveTimeStamp の使い方を教えてください。CryptSignMessage を使用してメッセージに署名することに成功し、TSA でデータにタイムスタンプを付けたいのですが、CryptRetrieveTimeStamp は常に *TRUST_E_TIME_STAMP* エラーを返します。

私の関数は次のようになります.pbMessagecbMessageはCryptSignMessageから受け取ったデータとサイズです:

PCRYPT_TIMESTAMP_CONTEXT tcontext = NULL;
HCERTSTORE hStore = NULL;


fReturn = CryptRetrieveTimeStamp(widestr.c_str(),
       TIMESTAMP_NO_AUTH_RETRIEVAL, 
       0, 
       szOID_RSA_MD5, 
       NULL, 
       (const BYTE*)pbMessage, 
       cbMessage, 
       &tcontext, 
       NULL, 
       &hStore);

エラーの意味はわかっています:タイムスタンプの署名者または証明書を検証できなかったか、形式が正しくありません。しかし、このエラーを何またはどのように解決するのかわかりませんか?

ヘルプ/ヒントをいただければ幸いです。ありがとう、マグダ

4

3 に答える 3

1

Wireshark を介して要求/応答を表示すると、問題に対する洞察が深まりました。

TSA は有効な TSA ですが、エンコーディングが間違っていました。*szOID_RSA_MD5* を *szOID_NIST_sha256* に変更すると、問題が解決しました。

于 2013-09-06T12:43:34.620 に答える
0

タイムスタンプの取得の問題は、OpenSSL と互換性がないことです...ただし、質問とは関係ありません。

于 2016-08-04T21:16:50.327 に答える
0

MSDN -

このCryptRetrieveTimeStamp関数は、タイム スタンプ要求をエンコードし、URL で指定された場所からタイム スタンプ トークンを取得してタイム スタンプ局 (TSA) に渡します。

ほとんどの場合、最初のパラメーターで有効な TSA を指定していません。これは -

wszUrl[の]

要求の送信先の TSA の URL を含むヌル終了ワイド文字列へのポインター。

編集- 推奨される解決策は、タイム スタンプの機関を変更することです。

于 2013-09-02T08:17:54.357 に答える