簡體   English   中英

加密API-CryptRetrieveTimeStamp

[英]Crypto API - CryptRetrieveTimeStamp

美好的一天,

有人可以使用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);

我知道錯誤的意思是: 時間戳簽名人和/或證書無法驗證或格式錯誤 但是我不知道如何解決該錯誤?

任何幫助/提示將不勝感激。 謝謝瑪格達

通過wireshark查看請求/響應可以更好地了解問題。

TSA是有效的TSA,但是編碼錯誤。 將* szOID_RSA_MD5 *更改為* szOID_NIST_sha256 *解決了我的問題。

MSDN-

CryptRetrieveTimeStamp函數對時間戳請求進行編碼,並從URL指定的位置到時間戳頒發機構(TSA)檢索時間戳令牌。

您很可能沒有在第一個參數中提供有效的TSA,即-

wszUrl [輸入]

指向一個以空字符結尾的寬字符串的指針,該字符串包含將請求發送到的TSA的URL。

編輯 -建議的解決方案是更改時間戳記權限。

時間戳檢索的問題在於它與OpenSSL不兼容...雖然與您的問題無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM