Статус: Участник
Группы: Участники
Зарегистрирован: 01.12.2020(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Добрый день. Столкнулся с проблемой при проверке подписанного файла на сервере. Если делать по примеру с доки, т.е. подписывать тестовым ключом и его проверять, то всё ок. Но если проверять подпись, которую на фронте делает клиент своим ключом, то получаю такую ошибку в браузере: Internal error. (0x800B010A). Вот код для проверки: Цитата: public function Verify($data, $sign, $toBase64 = true) { $signedData = new CPSignedData(); $signedData->set_ContentEncoding(BASE64_TO_BINARY); $signedData->set_Content($toBase64 ? base64_encode($data) : $data);
try { $signedData->VerifyCades($sign, CADES_BES, self::SIGN_DETACHED); $signers = $signedData->get_Signers(); $signs = [];
for ($i = 1; $i <= $signedData->get_Signers(); $i += 1) { $signer = $signers->get_Item($i); $cert = $signer->get_Certificate();
$signs []= (object)[ 'ts' => $signer->get_SigningTime(), 'cert' => new CryptoCertificate($cert) ]; }
return $signs; } catch (Exception $e) { return false; } }
А такое в консоли http://prntscr.com/11fjy8d.Подскажите пожалуйста, в чём может быть проблема?
|
|
|
|
Статус: Эксперт
Группы: Участники
Зарегистрирован: 05.03.2015(UTC) Сообщений: 1,602 Откуда: Иркутская область Сказал(а) «Спасибо»: 110 раз Поблагодарили: 394 раз в 366 постах
|
Добрый день. Внутри for творится какое-то безобразие, думаю не только у меня глаза кровью обливаются при виде $i+=1, неизвестного количества повторений цикла и переписывания всей переменной $signs. Полагаю, должно быть что-то вроде: Код:$cnt=$signers->get_Count();
for ($i = 1; $i <= $cnt; $i++) {
Теоретически для COM коллекций еще может работать foreach, но не факт что его пробросили в реализацию для php. Отредактировано пользователем 15 апреля 2021 г. 11:18:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.12.2020(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Автор: two_oceans Добрый день. Внутри for творится какое-то безобразие, думаю не только у меня глаза кровью обливаются при виде $i+=1, неизвестного количества повторений цикла и переписывания всей переменной $signs. Полагаю, должно быть что-то вроде: Код:$cnt=$signers->get_Count();
for ($i = 1; $i <= $cnt; $i++) {
Теоретически для COM коллекций еще может работать foreach, но не факт что его пробросили в реализацию для php. Спасибо за уточнение, но до туда скрипт даже не доходит, падает на этой строчке Цитата:$signedData->VerifyCades($sign, CADES_BES, self::SIGN_DETACHED); с ошибкой, которую писал в первом сообщении.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Здравствуйте. "0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра" Понятно, что необходимо делать? а) добавлять корневой сертификат, чтобы строилась цепочка б) на исключение - обрабатывать эту ситуацию и читать информацию о подписанте. Код: catch(Exception $e) {
if (strpos($e->getMessage(), "0x800B010A")) {
// $SignatureCheckResult = "Не удается построить цепочку сертификатов для доверенного корневого центра";
...
..
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.12.2020(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Автор: Андрей * Здравствуйте. "0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра" Понятно, что необходимо делать? а) добавлять корневой сертификат, чтобы строилась цепочка б) на исключение - обрабатывать эту ситуацию и читать информацию о подписанте. Код: catch(Exception $e) {
if (strpos($e->getMessage(), "0x800B010A")) {
// $SignatureCheckResult = "Не удается построить цепочку сертификатов для доверенного корневого центра";
...
..
На сервере установлен корневой сертификат, правда тестовый. И данные им подписываются и проверяются нормально. Почему тогда при проверке данных, подписанных уже реальной ЭП происходит ошибка? Я правильно понимаю, что необходимо установить боевой сертификат, чтобы данная ошибка ушла?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 01.12.2020(UTC) Сообщений: 15 Сказал(а) «Спасибо»: 4 раз
|
Установили такие сертификаты, не помогло. Цитата:from root #certmgr -inst -all -store uroot -file cacer.p7b from web #certmgr -inst -all -store uMy -file cacer.p7b
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: Razot17487 Установили такие сертификаты, не помогло. Цитата:from root #certmgr -inst -all -store uroot -file cacer.p7b from web #certmgr -inst -all -store uMy -file cacer.p7b почему должно помочь, если ставите, вероятно... не тот сертификат и не туда? uroot = user root, т.е. хранилище корневых пользователя, от которого запустили certmgr. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
посмотреть какой сертификат подписанта: /opt/cprocsp/bin/amd64/certmgr -list -file "/путь к файлу/файл с подписью.p7s" потом скачать сертификат его УЦ: URL сертификата УЦ : http://....cer или crt далее /opt/cprocsp/bin/amd64/certmgr -list -file "/путь к файлу/файл сертификата УЦ пользователя.cer" это корневой или промежуточный... ? Но всё проще, когда квалифицированные сертификаты.. установить в корневые сертификаты - ПАК "Минкомсвязь России" https://e-trust.gosuslugi.ru/#/portal/mainca |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.11.2020(UTC) Сообщений: 14 Поблагодарили: 1 раз в 1 постах
|
Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7bПри запросе из php запущенном от пользователя web список сертификатов отображается. sertifikaty web.txt (7kb) загружен 3 раз(а).Но проверка файла не проходит, что еще не так непонятно :(
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 12,701 Сказал «Спасибо»: 500 раз Поблагодарили: 2049 раз в 1589 постах
|
Автор: lcodemakerl Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7bПри запросе из php запущенном от пользователя web список сертификатов отображается. sertifikaty web.txt (7kb) загружен 3 раз(а).Но проверка файла не проходит, что еще не так непонятно :( Что мешает посмотреть, какой УЦ выдал сертификат подписанту? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close