2013-09-02 11 views
0

좋은 하루,암호화 API - CryptRetrieveTimeStamp

누군가가, CryptRetrieveTimeStamp을 암호화 API 함수를 사용하여 저를 도와 주실 수 있습니까? CryptSignMessage를 사용하여 메시지에 서명 한 후 TSA에서 데이터의 타임 스탬프를 작성하려고하지만 CryptRetrieveTimeStamp는 항상 * TRUST_E_TIME_STAMP * 오류를 반환합니다.

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); 

내가 아는 오류가 의미 : 타임 스탬프 서명자를하고 또는 인증서가 수 없습니다 다음과 같이

내 기능은 pbMessagecbMessage이 CryptSignMessage로부터받은 데이터와 크기, 모양 확인되었거나 형식이 잘못되었습니다. 그러나 나는이 오류를 어떻게 해결할 수 있을지 전혀 모른다.

도움이 되셨습니까/힌트를 보내 주시면 감사하겠습니다. 감사합니다, 마그

답변

1

wireshark를 통해 요청/응답을 보면 문제를 더 잘 파악할 수 있습니다.

TSA는 유효한 TSA이지만 인코딩이 잘못되었습니다. * szOID_RSA_MD5 *를 * szOID_NIST_sha256 *으로 변경하면 문제가 해결됩니다.

0

MSDN -

CryptRetrieveTimeStamp 함수는 타임 스탬프 요청을 인코딩하고 는 타임 스탬프 기관 (TSA)에 URL에 의해 지정된 위치에서 타임 스탬프 토큰을 검색합니다.

당신이 첫 번째 매개 변수에 유효한 TSA, 제공하지 않은 대부분의 경우 -

[에]

wszUrl이 null로 끝나는 넓은 문자열에 대한 포인터가 포함 된 요청을 보낼 TSA의 URL.

편집 - 제안 된 솔루션은 권한을 스탬핑 시간을 변경하는 것입니다.

0

타임 스탬프 검색의 문제점은 OpenSSL과 호환되지 않는다는 것입니다 ... 비록 당신의 질문과 관련이 없습니다.