Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

3 Страницы<123
Опции
К последнему сообщению К первому непрочитанному
Offline mata1986  
#21 Оставлено : 8 августа 2013 г. 15:08:28(UTC)
mata1986

Статус: Участник

Группы: Участники
Зарегистрирован: 02.08.2013(UTC)
Сообщений: 11

const
CERT_STORE_NAME = WideString('MY');

begin
if( not(hSystemStore = CertOpenSystemStore(hProv, CERT_STORE_NAME))) then
showmessage(syserrormessage (getlasterror));
end;

getlasterror is 'The system cannot find the file specified'.

How do I know that selected certificate is the one from smart card, and not some other.
Offline Андрей Писарев  
#22 Оставлено : 8 августа 2013 г. 15:19:55(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Код:
p:=CertOpenSystemStore(0, 'MY');
if not assigned(p) then
   begin
   // error
     exit;
   end; 


Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#23 Оставлено : 8 августа 2013 г. 15:25:23(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Автор: mata1986 Перейти к цитате
const
CERT_STORE_NAME = WideString('MY');

begin
if( not(hSystemStore = CertOpenSystemStore(hProv, CERT_STORE_NAME))) then
showmessage(syserrormessage (getlasterror));
end;

getlasterror is 'The system cannot find the file specified'.

How do I know that selected certificate is the one from smart card, and not some other.




pointer1: hSystemStore = ?
pointer2: CertOpenSystemStore = ?
if( not(pointer1 = pointer2)) then - Speak to the hand

pointer1<>pointer2

try:
hSystemStore:= CertOpenSystemStore(hProv, CERT_STORE_NAME);
if not assigned(hSystemStore) then ... error
Техническую поддержку оказываем тут
Наша база знаний
Offline mata1986  
#24 Оставлено : 8 августа 2013 г. 16:13:19(UTC)
mata1986

Статус: Участник

Группы: Участники
Зарегистрирован: 02.08.2013(UTC)
Сообщений: 11

Sorry, but I'm new in this, and it just doesn't work.
I think that CryptAcquireCertificatePrivateKey(pCert,0,0, hProv, @dwKeySpec,0) doesn't acquire key, and when I come to cryptsigmmessage, I get Access violation.... in module crypt32...

Код:

var
  signature : PBYTE ;
  count : pDWORD;
  hSystemStore : HCERTSTORE;
  pCert : PCCERT_CONTEXT;
  dwKeySpec : DWORD ;
  hProv : HCRYPTPROV ;
  SignPara : CRYPT_SIGN_MESSAGE_PARA ;
  cString:string;
  DataArray : PBYTE ;
  SizeArray : DWORD ;
  Size: Cardinal;
  p: Pointer;

const
  CERT_STORE_NAME = WideString('ROOT');

begin

p:=CertOpenSystemStore(0, 'MY');
if not assigned(p) then
   begin
     exit;
   end;


  if( not(hSystemStore = CertOpenSystemStore(hProv, CERT_STORE_NAME))) then
    if not assigned(hSystemStore) then
    showmessage(syserrormessage (getlasterror));

  pCert:=nil;
  hSystemStore:=p;

  pCert:=CertEnumCertificatesInStore(hSystemStore,pCert);

  if(CryptAcquireCertificatePrivateKey(pCert,0,0, hProv, @dwKeySpec,0)) then
    begin
      CryptReleaseContext(hProv,0);                
    end;       

  ZeroMemory(@SignPara,sizeof(SignPara));

  SignPara.cbSize:=sizeof(SignPara);
  SignPara.dwMsgEncodingType:=X509_ASN_ENCODING or  PKCS_7_ASN_ENCODING;
  SignPara.HashAlgorithm.pszObjId:=CertAlgIdToOID(CALG_MD5);
  SignPara.pSigningCert:=pCert;
  SignPara.cMsgCert:=1;
  SignPara.rgpMsgCert:=pCert;

  cString:=pwideChar('Test');

  DataArray:=PByte(cString);
  SizeArray:=strlen(PAnsiChar(cString));

  count:=0;
  if( not CryptSignMessage(@SignPara,true,1,DataArray,@SizeArray,nil,count)) then
    showmessage(syserrormessage (getlasterror));

  GetMem(signature, Size);
  FillChar(signature^, Size, 0);

  if( not CryptSignMessage( @SignPara,true,1,DataArray,@SizeArray,@signature,count)) then
     showmessage(syserrormessage (getlasterror));

   CertFreeCertificateContext(pCert);
   CertCloseStore(hSystemStore,0);
Offline Андрей Писарев  
#25 Оставлено : 8 августа 2013 г. 16:24:32(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
hProv = ... ?

Код:
if  NOT {path}
 CryptAcquireCertificatePrivateKey(pCert,0,0, hProv , @dwKeySpec,0) then
    begin
      CryptReleaseContext( hProv ,0);         
       EXIT;   {path}    
    end;     

Отредактировано пользователем 8 августа 2013 г. 16:25:37(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#26 Оставлено : 8 августа 2013 г. 16:27:44(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
Цитата:
cString:=pwideChar('Test');

DataArray:=PByte(cString);
SizeArray:=strlen(PAnsiChar(cString));

count:=0;
if( not CryptSignMessage(@SignPara,true,1,DataArray,@SizeArray,nil,count)) then



Use...
M:TMemoryStream;
M.loadfromfile(..); // or M.Write***

CryptSignMessage( ... M..poiner, M.size ... )
Техническую поддержку оказываем тут
Наша база знаний
Offline mata1986  
#27 Оставлено : 8 августа 2013 г. 16:29:47(UTC)
mata1986

Статус: Участник

Группы: Участники
Зарегистрирован: 02.08.2013(UTC)
Сообщений: 11

hProv has a value (it was 2364916, next time it was other value ... ).
CryptAcquireCertificatePrivateKey is false
Offline Андрей Писарев  
#28 Оставлено : 8 августа 2013 г. 16:32:53(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,752
Мужчина
Российская Федерация

Сказал «Спасибо»: 579 раз
Поблагодарили: 2307 раз в 1807 постах
p.s.
CryptAcquireCertificatePrivateKey (... hProv... )

or
CertGetCertificateContextProperty(pSignerCert, CERT_KEY_PROV_INFO_PROP_ID, KeyInfo, pcbData)
CryptAcquireContextW(hProv, KeyInfo^.pwszContainerName, KeyInfo^.pwszProvName, KeyInfo^.dwProvType, 0)
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
3 Страницы<123
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.