Статус: Участник
Группы: Участники
Зарегистрирован: 11.01.2021(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 4 раз
|
Здравствуйте. Задача такая. Нужно с помощью ЭЦП подписать файл на стороне php-сервера. Выполнять такое действие должен пользователь в браузере. При этом, желательно как-то определить чей это был сертификат, чтобы отразить это в БД. Какой Ваш пример из документации мне может помочь разобраться с этим ? Подписание с помощью плагина в браузере или подписание на стороне PHP ? Из первого не ясно как произойдёт подписание на сервере, из второго - как пользователь выберет свой сертификат для подписи в браузере. Либо я не понимаю, либо в Вашей документации не хватает третьего примера для моего случая. Локально я у себя настроил первый случай, Ваш демо-html-код отрабатывается на моём компьютере. Но далее у меня информационный тупик. Отредактировано пользователем 11 января 2021 г. 16:25:46(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
Добрый день! в плагине подписываете. На сервере в php проверяете и вытаскиваете необходимую информацию из подписи |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.01.2021(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 4 раз
|
Автор: Санчир Момолдаев Добрый день! в плагине подписываете. На сервере в php проверяете и вытаскиваете необходимую информацию из подписи Спасибо. В плагине подписываю хэш нужного файла (который лежит на сервере), правильно я понимаю ? Потом подпись отправляю на сервер и из подписи с помощью Вашего примера из документации я смогу найти данные владельца ЭЦП, с помощью которой была сделана подпись, верно ?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: Васильев Михаил Автор: Санчир Момолдаев Добрый день! в плагине подписываете. На сервере в php проверяете и вытаскиваете необходимую информацию из подписи Спасибо. В плагине подписываю хэш нужного файла (который лежит на сервере), правильно я понимаю ? Потом подпись отправляю на сервер и из подписи с помощью Вашего примера из документации я смогу найти данные владельца ЭЦП, с помощью которой была сделана подпись, верно ? или подписывайте на клиенте перед отправкой на сервер: Подпись файла с использованием FileAPI и чтением файла по частям |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.01.2021(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 4 раз
|
Автор: Андрей * Помимо установленного расширения PHP что ещё связанное с ЭЦП пользователей должно быть на PHP-сервере ? Какое условие работы этой части скрипта из примера в документации ? Что это за адрес $tsp_addres ? Какое хранилище сертификатов CURRENT_USER_STORE и что именно за сертификат "Certificate not found" ? В документации явно не хватает описания как это всё работает. У меня остался вопрос: как именно на стороне PHP-сервера понять, что хэш файла подписан на стороне браузера именно ЭЦП, а не руками строка создана, и кто владелец ЭЦП, которая использовалась при подписании ? $tsp_addres = "http://testca.cryptopro.ru/tsp/tsp.srf"; $cert = SetupCertificate(CURRENT_USER_STORE, "My", STORE_OPEN_READ_ONLY, CERTIFICATE_FIND_SUBJECT_NAME, "test", 0, 1); if (!$cert) { printf("Certificate not found\n"); return; }
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: Васильев Михаил
У меня остался вопрос: как именно на стороне PHP-сервера понять, что хэш файла подписан на стороне браузера именно ЭЦП, а не руками строка создана, и кто владелец ЭЦП, которая использовалась при подписании ?
на стороне сервера - выполняется проверка подписи к конкретному файлу. Смотрите пример на php основа: Цитата: $sd = new CPSignedData(); $sd->set_Content($content); $sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY); printf("Verify OK\n");
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: Васильев Михаил и кто владелец ЭЦП, которая использовалась при подписании ? После проверки подписи Цитата: $signObject = $sd->get_Signers(); $sObj = $signObject->get_Item(1); $sObj = $signObject->get_Item(1); $cert = $sObj->get_Certificate(); // https://docs.microsoft.c...cate?redirectedfrom=MSDN /* доступные атрибуты: $issuerName = $cert->get_IssuerName(); $fromDate = $cert->get_ValidFromDate(); $toDate = $cert->get_ValidToDate(); $serialNumber = $cert->get_SerialNumber(); $subjectName = $cert->get_SubjectName(); $thumbPrint = $cert->get_Thumbprint(); |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.01.2021(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 4 раз
|
Автор: Андрей * Автор: Васильев Михаил
У меня остался вопрос: как именно на стороне PHP-сервера понять, что хэш файла подписан на стороне браузера именно ЭЦП, а не руками строка создана, и кто владелец ЭЦП, которая использовалась при подписании ?
на стороне сервера - выполняется проверка подписи к конкретному файлу. Смотрите пример на php основа: Цитата: $sd = new CPSignedData(); $sd->set_Content($content); $sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY); printf("Verify OK\n");
$cert = SetupCertificate(CURRENT_USER_STORE, "My", STORE_OPEN_READ_ONLY, CERTIFICATE_FIND_SUBJECT_NAME, "test", 0, 1); При выполнении этой строки ошибка : Cannot find object or property. (0x80092004) Библиотека libphpcades.so собрана и добавлена в php.ini Apache перезагружен. В Вашем коротком примере есть $sm, его получаем так, как я понял: $sm = $sd->Sign($signer, 0, ENCODE_BASE64); Но тут есть $signer, который получаем в связке с сертификатом, но я не понимаю каким. Интересно, есть ли какой-то реально простой способ определить владельца ЭЦП по подписи без необходимости указания каких-либо сертификатов и тому подобному, просто одной работающей функцией ? Отредактировано пользователем 12 января 2021 г. 19:42:13(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Модератор, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,040 Сказал(а) «Спасибо»: 88 раз Поблагодарили: 226 раз в 213 постах
|
Вам выше Андрей * привел код для проверки. Его достаточно. Исключений нет? Проверка прошла : иначе ошибка Вам же не нужно подписывать ничего на сервере, следовательно не нужен и signer |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.01.2021(UTC) Сообщений: 19 Сказал(а) «Спасибо»: 4 раз
|
Автор: Санчир Момолдаев Вам выше Андрей * привел код для проверки. Его достаточно. Исключений нет? Проверка прошла : иначе ошибка Вам же не нужно подписывать ничего на сервере, следовательно не нужен и signer $sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY); тогда что указать в $sm в примере Андрея ?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close