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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Razot17487  
#1 Оставлено : 15 апреля 2021 г. 10:29:15(UTC)
Razot17487

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

Группы: Участники
Зарегистрирован: 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.
Подскажите пожалуйста, в чём может быть проблема?
Offline two_oceans  
#2 Оставлено : 15 апреля 2021 г. 11:14:22(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,342
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 312 раз в 294 постах
Добрый день.
Внутри for творится какое-то безобразие, думаю не только у меня глаза кровью обливаются при виде $i+=1, неизвестного количества повторений цикла и переписывания всей переменной $signs. Полагаю, должно быть что-то вроде:
Код:
$cnt=$signers->get_Count();
for ($i = 1; $i <= $cnt; $i++) {

Код:
$signs [$i]= (object)[
Теоретически для COM коллекций еще может работать foreach, но не факт что его пробросили в реализацию для php.

Отредактировано пользователем 15 апреля 2021 г. 11:18:33(UTC)  | Причина: Не указана

Offline Razot17487  
#3 Оставлено : 15 апреля 2021 г. 11:47:57(UTC)
Razot17487

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

Группы: Участники
Зарегистрирован: 01.12.2020(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Автор: two_oceans Перейти к цитате
Добрый день.
Внутри for творится какое-то безобразие, думаю не только у меня глаза кровью обливаются при виде $i+=1, неизвестного количества повторений цикла и переписывания всей переменной $signs. Полагаю, должно быть что-то вроде:
Код:
$cnt=$signers->get_Count();
for ($i = 1; $i <= $cnt; $i++) {

Код:
$signs [$i]= (object)[
Теоретически для COM коллекций еще может работать foreach, но не факт что его пробросили в реализацию для php.


Спасибо за уточнение, но до туда скрипт даже не доходит, падает на этой строчке
Цитата:
$signedData->VerifyCades($sign, CADES_BES, self::SIGN_DETACHED);
с ошибкой, которую писал в первом сообщении.
Offline Андрей *  
#4 Оставлено : 15 апреля 2021 г. 11:48:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1586 раз в 1221 постах
Здравствуйте.

"0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра"

Понятно, что необходимо делать?

а) добавлять корневой сертификат, чтобы строилась цепочка
б) на исключение - обрабатывать эту ситуацию и читать информацию о подписанте.


Код:
 catch(Exception $e) {

 if (strpos($e->getMessage(), "0x800B010A")) {   
      // $SignatureCheckResult = "Не удается построить цепочку сертификатов для доверенного корневого центра";
				 
...

..
 

Техническую поддержку оказываем тут
Наша база знаний
Offline Razot17487  
#5 Оставлено : 15 апреля 2021 г. 11:55:44(UTC)
Razot17487

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

Группы: Участники
Зарегистрирован: 01.12.2020(UTC)
Сообщений: 15
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Автор: Андрей * Перейти к цитате
Здравствуйте.

"0x800B010A: Не удается построить цепочку сертификатов для доверенного корневого центра"

Понятно, что необходимо делать?

а) добавлять корневой сертификат, чтобы строилась цепочка
б) на исключение - обрабатывать эту ситуацию и читать информацию о подписанте.


Код:
 catch(Exception $e) {

 if (strpos($e->getMessage(), "0x800B010A")) {   
      // $SignatureCheckResult = "Не удается построить цепочку сертификатов для доверенного корневого центра";
				 
...

..
 



На сервере установлен корневой сертификат, правда тестовый. И данные им подписываются и проверяются нормально. Почему тогда при проверке данных, подписанных уже реальной ЭП происходит ошибка? Я правильно понимаю, что необходимо установить боевой сертификат, чтобы данная ошибка ушла?

Offline Razot17487  
#6 Оставлено : 15 апреля 2021 г. 12:19:08(UTC)
Razot17487

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

Группы: Участники
Зарегистрирован: 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
Offline Андрей *  
#7 Оставлено : 15 апреля 2021 г. 12:46:12(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1586 раз в 1221 постах
Автор: 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.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#8 Оставлено : 15 апреля 2021 г. 12:54:04(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1586 раз в 1221 постах
посмотреть какой сертификат подписанта:
/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
Техническую поддержку оказываем тут
Наша база знаний
Offline lcodemakerl  
#9 Оставлено : 15 апреля 2021 г. 12:55:22(UTC)
lcodemakerl

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

Группы: Участники
Зарегистрирован: 10.11.2020(UTC)
Сообщений: 12
Российская Федерация

Поблагодарили: 1 раз в 1 постах
Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7b

При запросе из php запущенном от пользователя web список сертификатов отображается.

sertifikaty web.txt (7kb) загружен 3 раз(а).

Но проверка файла не проходит, что еще не так непонятно :(
Offline Андрей *  
#10 Оставлено : 15 апреля 2021 г. 13:00:54(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1586 раз в 1221 постах
Автор: lcodemakerl Перейти к цитате
Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7b

При запросе из php запущенном от пользователя web список сертификатов отображается.

sertifikaty web.txt (7kb) загружен 3 раз(а).

Но проверка файла не проходит, что еще не так непонятно :(


Что мешает посмотреть, какой УЦ выдал сертификат подписанту?
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#11 Оставлено : 15 апреля 2021 г. 13:03:44(UTC)
Андрей *

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

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

Сказал «Спасибо»: 388 раз
Поблагодарили: 1586 раз в 1221 постах
Автор: lcodemakerl Перейти к цитате
Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7b

Это неквалифицированные сертификаты.

У Вас реальный обмен - на квалифицированных? Тогда ставьте корневые ПАК МКС, выше ссылка на страницу для загрузки.



Техническую поддержку оказываем тут
Наша база знаний
Offline lcodemakerl  
#12 Оставлено : 15 апреля 2021 г. 13:16:29(UTC)
lcodemakerl

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

Группы: Участники
Зарегистрирован: 10.11.2020(UTC)
Сообщений: 12
Российская Федерация

Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
Автор: 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.


Автор: Андрей * Перейти к цитате
Автор: lcodemakerl Перейти к цитате
Сертификаты установлены отсюда http://cpca.cryptopro.ru/cacer.p7b

Это неквалифицированные сертификаты.

У Вас реальный обмен - на квалифицированных? Тогда ставьте корневые ПАК МКС, выше ссылка на страницу для загрузки.





Заработало.

Спасибо всем за помощь и терпение :)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.