ПОЖАЛУЙСТА, ПОМОГИТЕ СОВЕТОМ!!!
Пытаюсь создать файл с цепочкой сертификатов в PKCS #7, но что-то CertSaveStore возвращает FALSE (естественно, ничего не сохраняя...).
Причем, если я указываю вместо CERT_STORE_SAVE_TO_FILE сохранение в память CERT_STORE_SAVE_TO_MEMORY, то тогда CertSaveStore отрабатывается правильно и возвращается TRUE...
Вот, привожу краткую выдержку кода Delphi:
var
path_p7b: String;
encType, encCertLen: DWORD;
encCert: PByte;
hMyFile: THandle
hMyStore: HCERTSTORE;
pcert_context, ppStoreContext: PCCERT_CONTEXT;
provCA: HCRYPTPROV;
cont: PChar;
Result: Boolean;
begin
cont := nil;
encType := PKCS_7_ASN_ENCODING or X509_ASN_ENCODING;
...
CryptAcquireContext(@provCA, cont, CP_GR3410_2001_PROV_A,PROV_GOST_2001_DH, 0));
...
CryptSignAndEncodeCertificate(provCA, AT_SIGNATURE, encType, X509_CERT_TO_BE_SIGNED, @certInfo, @(certInfo.SignatureAlgorithm), nil, nil, @encCertLen);
GetMem(encCert, encCertLen);
CryptSignAndEncodeCertificate(provCA, AT_SIGNATURE, encType, X509_CERT_TO_BE_SIGNED, @certInfo, @(certInfo.SignatureAlgorithm), nil, encCert, @encCertLen);
...
path_p7b:='cert.p7b';
hMyFile := CreateFile(PCHAR(path_p7b) ,GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, 0, CREATE_ALWAYS, 0, 0);
hMyStore := CertOpenStore( CERT_STORE_PROV_MEMORY, PKCS_7_ASN_ENCODING,ProvCA,CERT_STORE_OPEN_EXISTING_FLAG, 0);
pcert_context := CertCreateCertificateContext(encType, encCert, encCertLen);
ppStoreContext := nil;
CertAddCertificateContextToStore(hMyStore,pcert_context, CERT_STORE_ADD_REPLACE_EXISTING, ppStoreContext);
Result := CertSaveStore(hStore,encType, CERT_STORE_SAVE_AS_PKCS7, CERT_STORE_SAVE_TO_FILE, @hMyFile, 0);
If Not Result Then begin MessageDlg('Error', MtError, [MbOk], 0); Exit; end;
end;
Почему Result возвращает FALSE? Что я делаю не так?...
Заранее спасибо за помощь!