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

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline Васильев Михаил  
#1 Оставлено : 11 января 2021 г. 16:24:54(UTC)
Васильев Михаил

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

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

Сказал(а) «Спасибо»: 4 раз
Здравствуйте.
Задача такая. Нужно с помощью ЭЦП подписать файл на стороне php-сервера.
Выполнять такое действие должен пользователь в браузере. При этом, желательно как-то определить чей это был сертификат, чтобы отразить это в БД.

Какой Ваш пример из документации мне может помочь разобраться с этим ?

Подписание с помощью плагина в браузере или подписание на стороне PHP ?
Из первого не ясно как произойдёт подписание на сервере, из второго - как пользователь выберет свой сертификат для подписи в браузере.

Либо я не понимаю, либо в Вашей документации не хватает третьего примера для моего случая.

Локально я у себя настроил первый случай, Ваш демо-html-код отрабатывается на моём компьютере.
Но далее у меня информационный тупик.

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

Offline Санчир Момолдаев  
#2 Оставлено : 11 января 2021 г. 18:56:12(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 226 раз в 213 постах
Добрый день!
в плагине подписываете.
На сервере в php проверяете и вытаскиваете необходимую информацию из подписи
Техническую поддержку оказываем тут
Наша база знаний
Offline Васильев Михаил  
#3 Оставлено : 12 января 2021 г. 9:45:12(UTC)
Васильев Михаил

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
Добрый день!
в плагине подписываете.
На сервере в php проверяете и вытаскиваете необходимую информацию из подписи


Спасибо.

В плагине подписываю хэш нужного файла (который лежит на сервере), правильно я понимаю ?

Потом подпись отправляю на сервер и из подписи с помощью Вашего примера из документации я смогу найти данные владельца ЭЦП, с помощью которой была сделана подпись, верно ?
Offline Андрей *  
#4 Оставлено : 12 января 2021 г. 11:45:31(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2049 раз в 1589 постах
Автор: Васильев Михаил Перейти к цитате
Автор: Санчир Момолдаев Перейти к цитате
Добрый день!
в плагине подписываете.
На сервере в php проверяете и вытаскиваете необходимую информацию из подписи


Спасибо.

В плагине подписываю хэш нужного файла (который лежит на сервере), правильно я понимаю ?

Потом подпись отправляю на сервер и из подписи с помощью Вашего примера из документации я смогу найти данные владельца ЭЦП, с помощью которой была сделана подпись, верно ?


или подписывайте на клиенте перед отправкой на сервер:
Подпись файла с использованием FileAPI и чтением файла по частям

Техническую поддержку оказываем тут
Наша база знаний
Offline Васильев Михаил  
#5 Оставлено : 12 января 2021 г. 12:42:59(UTC)
Васильев Михаил

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

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

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


или подписывайте на клиенте перед отправкой на сервер:
Подпись файла с использованием FileAPI и чтением файла по частям



Помимо установленного расширения 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;
}
Offline Андрей *  
#6 Оставлено : 12 января 2021 г. 12:50:11(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 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");

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#7 Оставлено : 12 января 2021 г. 12:53:31(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 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();


Техническую поддержку оказываем тут
Наша база знаний
Offline Васильев Михаил  
#8 Оставлено : 12 января 2021 г. 19:26:35(UTC)
Васильев Михаил

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Санчир Момолдаев  
#9 Оставлено : 12 января 2021 г. 19:59:51(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 88 раз
Поблагодарили: 226 раз в 213 постах
Вам выше Андрей * привел код для проверки. Его достаточно.
Исключений нет? Проверка прошла : иначе ошибка
Вам же не нужно подписывать ничего на сервере, следовательно не нужен и signer
Техническую поддержку оказываем тут
Наша база знаний
Offline Васильев Михаил  
#10 Оставлено : 12 января 2021 г. 20:01:58(UTC)
Васильев Михаил

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

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

Сказал(а) «Спасибо»: 4 раз
Автор: Санчир Момолдаев Перейти к цитате
Вам выше Андрей * привел код для проверки. Его достаточно.
Исключений нет? Проверка прошла : иначе ошибка
Вам же не нужно подписывать ничего на сервере, следовательно не нужен и signer




$sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY);

тогда что указать в $sm в примере Андрея ?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.