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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей *  
#21 Оставлено : 22 июля 2021 г. 14:19:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
SignData(True = отсоединённая подпись
SignData(FALSE = присоединённая подпись (как на тестовой странице с плагином).

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
tonax оставлено 22.07.2021(UTC)
Offline tonax  
#22 Оставлено : 22 июля 2021 г. 14:23:14(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
SignData(True = отсоединённая подпись
SignData(FALSE = присоединённая подпись (как на тестовой странице с плагином).


С найденным сертификатом и SignData(FALSE - заработало ура!!!
Offline tonax  
#23 Оставлено : 22 июля 2021 г. 14:26:39(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
А по поводу поиска сертификата, можете помочь?

Поиск по номеру не находит

Код:

//Поиск сертификата по серийному номеру
function getSignerCertificate(SerialNumber: string): Variant;
const
  CAPICOM_CURRENT_USER_STORE = 2;
var
  oStore: Variant;
  i: integer;
begin
  result := Unassigned;
  oStore := CreateOLEObject('CAdESCOM.Store');
  oStore.Open(CAPICOM_CURRENT_USER_STORE);
  for i := 1 to oStore.Certificates.Count - 1 do
    if oStore.Certificates.Item[i].SerialNumber = SerialNumber then
    begin
      result := oStore.Certificates.Item[i];
      Exit;
    end;
end;


А по отпечатку отлично находит.

Код:

//Подпись по отпечатку
function GetCertificateOfStamp(thumbprint: string; var oCertificate: olevariant; var onErr: string): boolean;
const
  CAPICOM_MY_STORE = 'MY';
  CAPICOM_CERTIFICATE_FIND_SHA1_HASH = $00000000;
  CAPICOM_CURRENT_USER_STORE = 2;
  CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var
  oStore, oCertificates: olevariant;
  x: integer;
begin
  onErr := '';
  result := false;
  try
    oStore := CreateOleObject('CAdESCOM.Store');
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

    oCertificates := oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, widestring(thumbprint));

    x := oCertificates.Count;
    if x = 0 then
    begin
      onErr := 'Не найден сертификат с отпечатком: [' + thumbprint + ']';
      exit;
    end;
    oCertificate := oCertificates.Item[1]; // oCertificates.Item(1);
    result := true;
  except
    on e: exception do
    begin
      onErr := 'Не удалось получить доступ к сертификату с отпечатком: [' + thumbprint + '] ' + e.Message;
    end;
  end;
end;


Выше в ветке написано, что надежнее искать по отпечатку. Т.е. не следует обращать внимание на проблемы с поиском сертификата по номеру?

Offline Андрей *  
#24 Оставлено : 22 июля 2021 г. 14:30:59(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?

У меня искалось, по указанному мною номеру (моему).

Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)
Техническую поддержку оказываем тут
Наша база знаний
Offline tonax  
#25 Оставлено : 22 июля 2021 г. 14:37:21(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?

У меня искалось, по указанному мною номеру (моему).

Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)


в SerialNumber строка, скопированная из св-в сертификата.

Ладно, пока будет искать по отпечатку...

А можно как-то вызвать диалог выбора сертификата, чтобы пользователь сам выбирал?
Offline Андрей *  
#26 Оставлено : 22 июля 2021 г. 15:02:18(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?

У меня искалось, по указанному мною номеру (моему).

Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)


в SerialNumber строка, скопированная из св-в сертификата.

Ладно, пока будет искать по отпечатку...


0) Желательно использовать правильные типы и параметры (widestring + oStore.Open(CAPICOM_CURRENT_USER_STORE,CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED); )


1) в цикле для отладки всегда можно добавить вывод серийных номеров, с которыми сравнение выполняется
2) серийный номер в Item[i].SerialNumber - не содержит "пробелов", которые есть при просмотре сертификатов.



Цитата:

А можно как-то вызвать диалог выбора сертификата, чтобы пользователь сам выбирал?


https://docs.cryptopro.r...%d0%b5%d0%ba%d1%82-store

Перечислить сертификаты, получить у каждого нужные сведения и показывать в своём диалоге.



Техническую поддержку оказываем тут
Наша база знаний
Offline tonax  
#27 Оставлено : 22 июля 2021 г. 15:46:21(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
Автор: Андрей * Перейти к цитате
getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?

У меня искалось, по указанному мною номеру (моему).

Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)


в SerialNumber строка, скопированная из св-в сертификата.

Ладно, пока будет искать по отпечатку...


0) Желательно использовать правильные типы и параметры (widestring + oStore.Open(CAPICOM_CURRENT_USER_STORE,CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED); )


1) в цикле для отладки всегда можно добавить вывод серийных номеров, с которыми сравнение выполняется
2) серийный номер в Item[i].SerialNumber - не содержит "пробелов", которые есть при просмотре сертификатов.



Цитата:

А можно как-то вызвать диалог выбора сертификата, чтобы пользователь сам выбирал?


https://docs.cryptopro.r...%d0%b5%d0%ba%d1%82-store

Перечислить сертификаты, получить у каждого нужные сведения и показывать в своём диалоге.



Отлично, а где можно посмотреть список других св-в объекта Store.Certificates.Item[i], по типу SerialNumber, например дату выдачи и окончания?

По ссылке https://docs.cryptopro.r...%d0%b5%d0%ba%d1%82-store посмотрел, не нашел
Offline Андрей *  
#28 Оставлено : 22 июля 2021 г. 16:00:31(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
cadescom/cadescom_class/certificates

ICertificate
Предоставляет методы для работы с сертификатом открытого ключа. Расширяет интерфейс CAPICOM.Certificate.
Далее в MSDN по ссылке
Техническую поддержку оказываем тут
Наша база знаний
Offline nickm  
#29 Оставлено : 22 июля 2021 г. 16:00:58(UTC)
nickm

Статус: Активный участник

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

Сказал(а) «Спасибо»: 47 раз
Поблагодарили: 38 раз в 36 постах
Автор: tonax Перейти к цитате
...
а где можно посмотреть список других св-в объекта Store.Certificates.Item[i], по типу SerialNumber, например дату выдачи и окончания?
...



Цитата:
Certificate Properties (Node)

https://docs.microsoft.c...cate-properties-nodepage
thanks 1 пользователь поблагодарил nickm за этот пост.
tonax оставлено 23.07.2021(UTC)
Offline Андрей *  
#30 Оставлено : 22 июля 2021 г. 16:29:40(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
+
Объект CPCertificate
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
tonax оставлено 23.07.2021(UTC)
Offline tonax  
#31 Оставлено : 23 июля 2021 г. 10:11:46(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Спасибо, более-менее разобрался в этих хитросплетениях :)

А как можно узнать имеет ли сертификат пароль? Ведь, после того, как из списка будет выбран сертификат, нужно запросить его пароль от пользователя, если сертификат с паролем
Offline Андрей *  
#32 Оставлено : 23 июля 2021 г. 10:34:02(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
Автор: tonax Перейти к цитате
А как можно узнать имеет ли сертификат пароль? Ведь, после того, как из списка будет выбран сертификат, нужно запросить его пароль от пользователя, если сертификат с паролем


А почему бы это не доверить штатному поведению СКЗИ и его диалогу на ввод?

Snimok ehkrana ot 2021-07-23 11-33-34.png (22kb) загружен 8 раз(а).


Техническую поддержку оказываем тут
Наша база знаний
Offline tonax  
#33 Оставлено : 23 июля 2021 г. 15:25:38(UTC)
tonax

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

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

Сказал(а) «Спасибо»: 6 раз
Автор: Андрей * Перейти к цитате
Автор: tonax Перейти к цитате
А как можно узнать имеет ли сертификат пароль? Ведь, после того, как из списка будет выбран сертификат, нужно запросить его пароль от пользователя, если сертификат с паролем


А почему бы это не доверить штатному поведению СКЗИ и его диалогу на ввод?

Snimok ehkrana ot 2021-07-23 11-33-34.png (22kb) загружен 8 раз(а).




А как можно вызвать такое окно и взаимодействовать ним?
Offline Андрей *  
#34 Оставлено : 23 июля 2021 г. 21:05:36(UTC)
Андрей *

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

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

Сказал «Спасибо»: 379 раз
Поблагодарили: 1528 раз в 1175 постах
Это окно появляется, если установлен пароль на контейнере и он не был запомнен.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
tonax оставлено 24.07.2021(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.