powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подпись xml и прикрепление сертификата.
5 сообщений из 5, страница 1 из 1
Подпись xml и прикрепление сертификата.
    #39647721
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбираюсь с гостом и Crypto API.
С подписью вроде проблем нет. Есть проблема правильно заполнить тег <X509Certificate>.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
var
  Prov: HCRYPTPROV;
  hKey: HCRYPTKEY;
  UserCert: AnsiString;
  UserCertLength: DWORD;
  UserCertBase64: AnsiString;
begin
  if not CryptAcquireContext(Prov, PAnsiChar(ContainerName), PAnsiChar(CP_GR3410_2001_PROV_A), PROV_GOST_2001_DH, 0) then
    CryptoError('CryptAcquireContext');
  try
    if not CryptGetUserKey(Prov, AT_KEYEXCHANGE, hKey) then
      CryptoError('CryptGetUserKey');

    if not CryptGetKeyParam(hKey, KP_CERTIFICATE, nil, UserCertLength, 0) then
      CryptoError('CryptGetKeyParam(KP_CERTIFICATE length)');

    if UserCertLength = 0 then
      Assert(False);
    SetLength(UserCert, UserCertLength);

    if not CryptGetKeyParam(hKey, KP_CERTIFICATE, PByte(UserCert), UserCertLength, 0) then
      CryptoError('CryptGetKeyParam(KP_CERTIFICATE data)');

    UserCertBase64 := Base64EncodeStr(UserCert);
  finally
    CryptReleaseContext(Prov, 0);
  end;


В UserCertBase64 получается сертификат с PrivateKey. Это явно не то что должно быть в поле <X509Certificate>.
Что прописать в <X509Certificate>? Кто-нибудь поможет кодом? Правильно ли я понимаю, что там должен лежать тот же сертификат, но без PrivateKey?
...
Рейтинг: 0 / 0
Подпись xml и прикрепление сертификата.
    #39647809
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerВ UserCertBase64 получается сертификат с PrivateKeyКто сказал?

HommerCryptGetKeyParam(hKey, KP_CERTIFICATE..Копипаст без понимания, что делает функция?
...
Рейтинг: 0 / 0
Подпись xml и прикрепление сертификата.
    #39647811
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerPAnsiChar(CP_GR3410_2001_PROV_A), PROV_GOST_2001_DHВыноси это в настройки или перекомпилировать будешь под 2012.

А еще лучше - определять по контексту сертификата.

HommerAT_KEYEXCHANGEА у меня нет ключа обмена, только ключ подписи - нельзя мне подписывать, да?


HommerCryptGetKeyParam(hKey, KP_CERTIFICATEТребовать хранение сертификата в контейнере - норма?
...
Рейтинг: 0 / 0
Подпись xml и прикрепление сертификата.
    #39647813
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

Итого:
лезем в ContainerName с надеждой встретить ключ обмена и сертификат.

Чтобы получить в UserCertBase64 закодированный в base64 сертификат.

Еще варианты:
а) вызвать диалог выбора сертификата
б) показать свой диалог - перечислить список сертификатов (попутно проверяя срок действия\наличие ссылки на закрытый ключ\алгоритм)
в) аналогично б) - только прочитать из настроек (после выбора пользователем) и загрузить необходимый сертификат и ссылку на контейнер.
...
Рейтинг: 0 / 0
Подпись xml и прикрепление сертификата.
    #39647815
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CryptUIDlgSelectCertificateFromStore - поиск в ветке Delphi
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подпись xml и прикрепление сертификата.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]