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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Ragnarek  
#1 Оставлено : 18 августа 2018 г. 11:56:03(UTC)
Ragnarek

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

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

Поблагодарили: 2 раз в 1 постах
Здравствуйте. Поставлен ряд задач:
1. Извлечь сертификат из отделенной подписи.
2. Проверить валидность сертификата и что подпись файла.

Что имеется:
Ubuntu 16.04
php 7.1
Установленные криптопро и sdk

Вопросы:
1. Можно ли, и если можно то как, извлечь сертификат из отделенной подписи?
2. Какой алгоритм и реализация проверки подписанного файла.
Пробую так:
Код:

try
        {
            $sd = new \CPSignedData();

            $sd->set_ContentEncoding(BASE64_TO_BINARY);
            $sd->set_Content($base64);

            $check = $sd->VerifyCades($sgn, CADES_BES, 1); // 1 - отсоединенная

            printf('OK');
        }
        catch(Exception $e)
        {
            printf('Exception: ' . $e->getMessage() . "\n");
            printf("FAIL\n");
        }

Получаю
'Exception' with message 'The parameter is incorrect. (0x80070057)'

При команде
Код:
/opt/cprocsp/bin/amd64/cryptcp -verify 7f589f0182c18c8f23776f18f5ba6d4b.jpg  -f file.p7s  

Получаю в ответ:
cert.jpg (41kb) загружен 34 раз(а).

Причем информация из сертификата корректна. Является ли сообщение "Certificate chains are checked." признаком валидности сертификата?
И как проверить подпись файла?
Offline Максим Коллегин  
#2 Оставлено : 18 августа 2018 г. 22:04:00(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,375
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 704 раз в 613 постах
Примеры php смотрели? Приложите подпись и исходный файл в том виде, в котором проверяете.
Знания в базе знаний, поддержка в техподдержке
Offline Ragnarek  
#3 Оставлено : 20 августа 2018 г. 9:30:05(UTC)
Ragnarek

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

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

Поблагодарили: 2 раз в 1 постах
Автор: Максим Коллегин Перейти к цитате
Примеры php смотрели? Приложите подпись и исходный файл в том виде, в котором проверяете.


Примеры здесь - Руководство разработчика по php не очень информативны. Если скажите где есть описание классов и методов для библиотеки, буду очень признателен.
Файлы прилагаю.
files.zip (12kb) загружен 14 раз(а).

Подпись создается плагином для браузера.

Отредактировано пользователем 20 августа 2018 г. 9:30:56(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#4 Оставлено : 20 августа 2018 г. 13:01:13(UTC)
Андрей *

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

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

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

У Вас ЭП-отсоединеная: -detached требуется.

Цитата:
cryptcp -verify "c68a9bb1622149ca47913e38a86dd19c.png" -f "c68a9bb1622149ca47913e38a86dd19c.png.sgn" -detached -nochain



Проверяется без ошибок.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#5 Оставлено : 20 августа 2018 г. 13:37:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Интерфейс ICPSignedData

SignedData.Verify
Цитата:
SignedData.Verify( _
ByVal SignedMessage, _
[ ByVal bDetached ], _
[ ByVal VerifyFlag ] _
)


Указывая VerifyFlag - можно дополнительно проверить сертификат или только математическую корректность подписи.


Пример - Проверка отделенной подписи.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#6 Оставлено : 20 августа 2018 г. 13:41:54(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Код:
{
            $sd = new \CPSignedData();

            $sd->set_ContentEncoding(BASE64_TO_BINARY);
            $sd->set_Content($base64);

            $check = $sd->VerifyCades($sgn, CADES_BES, 1); // 1 - отсоединенная

            printf('OK');
        }



$sgn - корректно инициализировано значением подписи?
Техническую поддержку оказываем тут
Наша база знаний
Offline Ragnarek  
#7 Оставлено : 20 августа 2018 г. 18:16:35(UTC)
Ragnarek

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

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

Поблагодарили: 2 раз в 1 постах
Автор: Андрей Писарев Перейти к цитате

$sgn - корректно инициализировано значением подписи?

Храню в базе, как приходит с клиента, файл подписи, который прикладывал в архиве и есть эта подпись, но в целом направление понятно, буду ориентироваться на предложенные примеры. Попробую может удалить переводы строк.
В консоли проверил, всё работает, спасибо.

А вытащить сертификат из отделенной подписи есть какая нибудь возможность?
Мне нужно проверить, что файл подписан сертификатом именно того пользователя, который загружает файл.
Я могу получить и хранить как сертификат, так и его отпечаток для пользователя, то есть есть с чем сравнивать.
Вопрос только в том, могу ли я из отделенной подписи получить серт.
Offline Ragnarek  
#8 Оставлено : 20 августа 2018 г. 18:21:48(UTC)
Ragnarek

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

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

Поблагодарили: 2 раз в 1 постах
видоизменил слегка код, уже более внятная ошибка
Код:
   $sd = new \CPSignedData();
   $sd->set_Content($base64);
   $check = $sd->Verify($sgn, 1, VERIFY_SIGNATURE_ONLY ); // 1 - отсоединенная

Получаю в ответ - 'Invalid Signature. (0x80090006)'


По получению сертификата предварительно разобрался, но на деле еще не дошел, потому что дальше проверки продвинуться не могу

Отредактировано пользователем 20 августа 2018 г. 19:09:29(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#9 Оставлено : 20 августа 2018 г. 20:23:42(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: Ragnarek Перейти к цитате
Автор: Андрей Писарев Перейти к цитате

$sgn - корректно инициализировано значением подписи?

Храню в базе, как приходит с клиента, файл подписи, который прикладывал в архиве и есть эта подпись, но в целом направление понятно, буду ориентироваться на предложенные примеры. Попробую может удалить переводы строк.
В консоли проверил, всё работает, спасибо.

А вытащить сертификат из отделенной подписи есть какая нибудь возможность?
Мне нужно проверить, что файл подписан сертификатом именно того пользователя, который загружает файл.
Я могу получить и хранить как сертификат, так и его отпечаток для пользователя, то есть есть с чем сравнивать.
Вопрос только в том, могу ли я из отделенной подписи получить серт.



Свойство ICPSigner5::SignatureStatus


Интерфейс ICPSignedData -> SignedData.Signers

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей Писарев  
#10 Оставлено : 20 августа 2018 г. 20:27:22(UTC)
Андрей *

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

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

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Объект CPSigners -> CPSigner

у Signer - есть Certificate
-> свойства Thumbprint \ SerialNumber и т.д. по ссылке.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
3 Страницы123>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.