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

Уведомление

Icon
Error

3 Страницы<123>
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей *  
#11 Оставлено : 13 сентября 2024 г. 12:49:34(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: GTAlex Перейти к цитате

Мой код

Код:

$signedData = new \CPSignedData();
$signedData->set_ContentEncoding(BASE64_TO_BINARY);

-------ВОТ ТУТ ПОТЕРЯНА ПЕРЕДАЧА ДАННЫХ ИЗ ФАЙЛА

$signedData->VerifyCades($signature, CADES_BES, 1);

$cpSigners = $signedData->get_Signers();
$cpSigner = $cpSigners->get_Item(1);
$signingTime = $cpSigner->get_SigningTime();




+ try\catch и проверки...
VerifyCades без передачи подписанного - выдаёт ошибку тоже, код был упрощён...?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
GTAlex оставлено 13.09.2024(UTC)
Offline GTAlex  
#12 Оставлено : 13 сентября 2024 г. 12:50:49(UTC)
GTAlex

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

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

Сказал(а) «Спасибо»: 66 раз
Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
Автор: GTAlex Перейти к цитате
Автор: Андрей * Перейти к цитате
в signature в серверном коде (не вижу код) - что?
Отсоединенная или присоединенная подпись?


Отсоединенная подпись


а почему тогда не передаётся подписанный контент?



передается, пропустил строчку
$signedData->set_Content($content);

я не копипастом вставил, а собрал вырезав лишнее
Offline GTAlex  
#13 Оставлено : 13 сентября 2024 г. 12:56:54(UTC)
GTAlex

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

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

Сказал(а) «Спасибо»: 66 раз
Поблагодарили: 1 раз в 1 постах
выделил код отдельно

Код:

$signedData = new \CPSignedData();
$signedData->set_ContentEncoding(BASE64_TO_BINARY);
$signedData->set_Content(file_get_contents('test.txt'));
try {
    $signedData->VerifyCades(file_get_contents('test.txt.sig'), CADES_BES, 1);
} catch (Exception $exception) {
    var_dump($exception->getMessage());
}

$cpSigners = $signedData->get_Signers();
$cpSigner = $cpSigners->get_Item(1);
try {
    $signingTime = $cpSigner->get_SigningTime();
} catch (Exception $exception) {
    var_dump($exception->getMessage());
}

echo 'done';


результат
Код:

string(32) "Invalid Signature.
 (0x80090006)"
string(45) "Cannot find object or property.
 (0x80092004)"
done
Offline Андрей *  
#14 Оставлено : 13 сентября 2024 г. 12:57:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
предлагаю внимательно посмотреть код,
что передаётся, VerifyCades отрабатывает и что с проверками...

Код:
if ($result)
			 { 
     		   $signObject = $SignedData->get_Signers();
			 if ($signObject)
			 {
				 $sObj = $signObject->get_Item(1);
				 if ($sObj)
				 {
					try
					{ 
  --- ВОТ ЗДЕСЬ падает? или не добирается до get_SigningTime ?

					 $SigningTime = $sObj->get_SigningTime(); 
					} 
					catch(Exception $e) 
					{ 
					 $SignatureCheckResult = $SignatureCheckResult." Не удалось получить дату и время подписи, ошибка: ".$e->getMessage();
					} 
				 }
			  } 
			 } 
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
GTAlex оставлено 13.09.2024(UTC)
Offline Андрей *  
#15 Оставлено : 13 сентября 2024 г. 12:59:57(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: GTAlex Перейти к цитате
выделил код отдельно

Код:

$signedData = new \CPSignedData();
$signedData->set_ContentEncoding(BASE64_TO_BINARY);
$signedData->set_Content(file_get_contents('test.txt'));
try {
    $signedData->VerifyCades(file_get_contents('test.txt.sig'), CADES_BES, 1);
} catch (Exception $exception) {
    var_dump($exception->getMessage());
}

$cpSigners = $signedData->get_Signers();
$cpSigner = $cpSigners->get_Item(1);
try {
    $signingTime = $cpSigner->get_SigningTime();
} catch (Exception $exception) {
    var_dump($exception->getMessage());
}

echo 'done';


результат
Код:

[h]string(32) "Invalid Signature.[/h]
 (0x80090006)"
string(45) "Cannot find object or property.
 (0x80092004)"
done


Вот и ответ.
Не будет доступа к атрибуту, если подпись не прошла проверку.

Неправильно в коде...
$signedData->set_Content(file_get_contents('test.txt')); - передаётся что?
Бинарный контент, а выше указано, что он в base64 на входе должен быть.



$signedData->set_Content( base64_encode (file_get_contents('test.txt') ));

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
GTAlex оставлено 13.09.2024(UTC)
Offline GTAlex  
#16 Оставлено : 13 сентября 2024 г. 13:01:10(UTC)
GTAlex

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

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

Сказал(а) «Спасибо»: 66 раз
Поблагодарили: 1 раз в 1 постах
Автор: GTAlex Перейти к цитате

$signingTime = $cpSigner->get_SigningTime();


падает тут (полный код выше запостил)

Offline Андрей *  
#17 Оставлено : 13 сентября 2024 г. 13:01:46(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
а от клиента всё успешно, потому что в Content приходит сразу в base64 (из плагина, например).

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
GTAlex оставлено 13.09.2024(UTC)
Offline GTAlex  
#18 Оставлено : 13 сентября 2024 г. 13:02:50(UTC)
GTAlex

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

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

Сказал(а) «Спасибо»: 66 раз
Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате

Вот и ответ.
Не будет доступа к атрибуту, если подпись не прошла проверку.

Неправильно в коде...
$signedData->set_Content(file_get_contents('test.txt')); - передаётся что?
Бинарный контент, а выше указано, что он в base64 на входе должен быть.

$signedData->set_Content( base64_encode (file_get_contents('test.txt') ));




Спасибо огромное!
Offline Андрей *  
#19 Оставлено : 13 сентября 2024 г. 13:03:00(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: GTAlex Перейти к цитате
Автор: GTAlex Перейти к цитате

$signingTime = $cpSigner->get_SigningTime();


падает тут (полный код выше запостил)



так выше упало на VerifyCades, почему нет проверок этого?
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
GTAlex оставлено 13.09.2024(UTC)
Offline GTAlex  
#20 Оставлено : 13 сентября 2024 г. 13:03:48(UTC)
GTAlex

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

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

Сказал(а) «Спасибо»: 66 раз
Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
а от клиента всё успешно, потому что в Content приходит сразу в base64 (из плагина, например).



понял, спасибо!

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