Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
SignData(True = отсоединённая подпись SignData(FALSE = присоединённая подпись (как на тестовой странице с плагином).
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
tonax оставлено 22.07.2021(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей * SignData(True = отсоединённая подпись SignData(FALSE = присоединённая подпись (как на тестовой странице с плагином).
С найденным сертификатом и SignData(FALSE - заработало ура!!!
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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;
Выше в ветке написано, что надежнее искать по отпечатку. Т.е. не следует обращать внимание на проблемы с поиском сертификата по номеру?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?
У меня искалось, по указанному мною номеру (моему).
Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 20.07.2021(UTC) Сообщений: 13
Сказал(а) «Спасибо»: 6 раз
|
Автор: Андрей * getSignerCertificate(SerialNumber - что указано, скопировано из ... просмотра свойств сертификата?
У меня искалось, по указанному мною номеру (моему).
Серийный номер - не уникален и могут быть коллизии (например, можно сгенерировать с нужным номером сертификат (тестовый) - тогда какой будет использоваться?)
в SerialNumber строка, скопированная из св-в сертификата. Ладно, пока будет искать по отпечатку... А можно как-то вызвать диалог выбора сертификата, чтобы пользователь сам выбирал?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: 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Перечислить сертификаты, получить у каждого нужные сведения и показывать в своём диалоге. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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 посмотрел, не нашел
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
cadescom/cadescom_class/ certificatesICertificateПредоставляет методы для работы с сертификатом открытого ключа. Расширяет интерфейс CAPICOM.Certificate. Далее в MSDN по ссылке |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 31.05.2016(UTC) Сообщений: 1,831
Сказал(а) «Спасибо»: 450 раз Поблагодарили: 312 раз в 294 постах
|
|
1 пользователь поблагодарил nickm за этот пост.
|
tonax оставлено 23.07.2021(UTC)
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
|
|
1 пользователь поблагодарил Андрей * за этот пост.
|
tonax оставлено 23.07.2021(UTC)
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close