11.09.2006 15:59:23Импорт закрытого ключа из PFX Ответов: 1
Дмитрий
доброго всем времени суток! для передачи сессионого ключа использую шифрование ключами из сертификатов cer/pfx. Из cer ключ импортируется нормально, с импортом из pfx проблема:

AssignFile(F, KeyFile);
try
Reset(F, 1);
encCertLen := FileSize(F);
GetMem(encCert, encCertLen);
try
BlockRead(F, encCert^, encCertLen);
pPFX.cbData := encCertLen;
pPFX.pbData := encCert;
GetMem(passw, 2*Length(password)+2);
try
StringToWideChar(password, passw, Length(password)*2+2);
SertStore := PFXImportCertStore(@pPFX,passw, CRYPT_EXPORTABLE);
finally
FreeMem(passw);
end;
if (SertStore<>nil) then
begin
try
pCertContext := nil;
pCertContext := CertEnumCertificatesInStore(SertStore, nil);
// pCertContext := CertEnumCertificatesInStore(SertStore, pCertContext);
if (pCertContext<>nil) then
try
CryptImportPublicKeyInfoEx(bProvider,X509_ASN_ENCODING or PKCS_7_ASN_ENCODING, @pCertContext.pCertInfo.SubjectPublicKeyInfo, CALG_RSA_KEYX, 0, nil, @FpPrivateKey);


В дальнейшем при попытке импртировать сессионый ключ
if not CryptImportKey(Provider,FKeyBuffer,FKeyBufferSize,FpPrivateKey,0{CRYPT_EXPORTABLE},@Key) then

{FKeyBuffer,FKeyBufferSize} здесь лежит сессионый ключ

возникает

Bad UID.

При попытки экспортировать закрытый ключ сразу после импорта из pfx в буфер: Key not valid for use in specified state

в чем может быть проблема?

заранее спасибо за ответ
 
Ответы:
12.09.2006 12:42:28kure
Если вы это пробуете сделать с КриптоПро CSP то не получится. Не поддерживается экспорт долговременного закрытого ключа на пароле в pfx.