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

Уведомление

Icon
Error

5 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline IGORPzzz  
#1 Оставлено : 28 сентября 2018 г. 21:23:44(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Приветствую уважаемые коллеги!

Я новичок в данном деле (не тот новичок которым отравили Скрипалей).

Меня интересует процедура подписи и проверки документа.

Вот что я могу:

Использую libphpcades.so крипто про 4

Скрипт:



И все здесь хорошо, контент подписывается, я получаю некую информацию.

Главные вопросы
В метод $this->SignedData->set_Content(<что сюда отдавать>) звучит глупо, и все же. Ну не могу же я к примеру файл размером 5 MB отдать или 1 GB ???? Я так полагаю сюда отдаётся md5???
В переменной $sm сформировалась сигнатура, что с ней делать? Это подпись?

Можно в общих словах объяснить процедуру подписи файла?.

Спасибо!
Offline IGORPzzz  
#2 Оставлено : 28 сентября 2018 г. 21:25:55(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Вот пример того что я получаю:

Сигнатура:
Offline Андрей Писарев  
#3 Оставлено : 28 сентября 2018 г. 22:32:02(UTC)
Андрей *

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

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

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

До вызова set_Content - необходимо указать, что данные предварительно были закодированы в base64.


в content передавать base64 строку.

Сейчас в подписи (тип - присоедиенная) - есть только 10 байт и по сигнатуре "PK" - похоже, что была попытка "подписать" архив, но файл прочитали как "текстовый"?

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

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2045 раз в 1586 постах
Здесь посмотрите пример (описана проверка)


Цитата:

$content = base64_encode(file_get_contents(путь к файлу));



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

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
IGORPzzz оставлено 28.09.2018(UTC)
Offline IGORPzzz  
#5 Оставлено : 28 сентября 2018 г. 23:39:35(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Фантастика!
Спасибо!
Offline IGORPzzz  
#6 Оставлено : 29 сентября 2018 г. 1:50:37(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Моя радость была не долгой.

Из за чего ошибка 0x80091004 в гугле информации 0.

Лицензия активна на CSP и TSP
Offline IGORPzzz  
#7 Оставлено : 29 сентября 2018 г. 2:02:27(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Еще час назад было все ок.

0x80091004 Invalid cryptographic message type Неправильный формат файла 4
0x80091010 The streamed cryptographic message is not ready to return data Пустой файл 16

Offline Андрей Писарев  
#8 Оставлено : 29 сентября 2018 г. 7:35:53(UTC)
Андрей *

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

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

Сказал «Спасибо»: 500 раз
Поблагодарили: 2045 раз в 1586 постах
Автор: IGORPzzz Перейти к цитате
Моя радость была не долгой.

Из за чего ошибка 0x80091004 в гугле информации 0.

Лицензия активна на CSP и TSP


Неправильные данные в содержимом.

Без кода и примеров - не понятно, что делалось.

+ есть проверка криптографии - через плагин, а здесь для CadesT и примеры в CPDN.
Техническую поддержку оказываем тут
Наша база знаний
Offline IGORPzzz  
#9 Оставлено : 29 сентября 2018 г. 10:35:17(UTC)
IGORPzzz

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

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

Сказал(а) «Спасибо»: 1 раз
Вот полностью код


Код:
<?php
/**
 * Created by PhpStorm.
 * User: igorp
 * Date: 28.09.2018
 * Time: 18:47
 */

namespace Api\Model\SignatureService;


use Csp\CPSignedData;
use Csp\CPSigner;
use Csp\CPStore;
use Engine\Core\Config\Config;
use Engine\DI\DI;
use Engine\Model;
use Exception;

class SignatureService extends Model
{
    /**
     * @var CPStore
     */
    private $Store;
    /**
     * @var CPSigner
     */
    private $Signer;

    /**
     * @var CPSignedData
     */
    private $SignedData;





    /**
     * @var string
     */
    public $query = 'ADMINISTRATOR';
    /**
     * @var int
     */
    public $findType = 1;
    public $content;
    /**
     * @var string
     */
    public $storeName = 'My';
    /**
     * @var string
     */
    public $tspServer = '';
    /**
     * Тип подписываемого контента
     * @var int
     */
    public $contentEncoding = BASE64_TO_BINARY;




    /**
     * SignatureService constructor.
     * @param DI $di
     */
    public function __construct (DI $di)
    {
        parent::__construct($di);

        $this->Store = new CPStore();
//        $this->Signer = new CPSigner();
        $class = "CPSigner"; $this->Signer = new $class();

//        $class = "CPSignedData"; $this->SignedData = new $class();
        $this->SignedData = new CPSignedData();
    }



    /**
     * @return bool|string
     */
    public function sign()
    {
        try {

            if (empty($this->tspServer))
                $this->tspServer = Config::item('TSP_SERVER', 'signature_service');

            $cert = $this->SetupCertificate(
                CURRENT_USER_STORE,
                'My',
                STORE_OPEN_READ_ONLY,
                CERTIFICATE_FIND_SUBJECT_NAME,
                'ADMINISTRATOR', //Идентификатор сертификата в строке CN
                0,
                1
            );

            if (!$cert) {
                return 'нет сетрификата';
            }

            $this->Signer->set_TSAAddress($this->tspServer);
            $this->Signer->set_Certificate($cert);


            $this->SignedData->set_ContentEncoding(BASE64_TO_BINARY);
            $this->SignedData->set_Content($this->content);
            
            $sm = $this->SignedData->Sign($this->Signer, 0, STRING_TO_UCS2LE);
            print_r($sm);
            $this->SignedData->Verify($sm, 0, VERIFY_SIGNATURE_AND_CERTIFICATE);

            return 1;
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }



    /**
     * @param string $signature
     */
    public function verify(string $signature)
    {

    }



    /**
     * @param $location
     * @param $name
     * @param $mode
     * @return CPStore
     */
    private function SetupStore($location, $name, $mode)
    {
        $store = new CPStore();
        $store->Open($location, $name, $mode);
        return $store;
    }



    /**
     * @param $location
     * @param $name
     * @param $mode
     * @return object
     */
    private function SetupCertificates($location, $name, $mode)
    {
        $store = $this->SetupStore($location, $name, $mode);
        $certs = $store->get_Certificates();
        return $certs;
    }



    /**
     * @param $location
     * @param $name
     * @param $mode
     * @param $find_type
     * @param $query
     * @param $valid_only
     * @param $number
     * @return mixed
     */
    private function SetupCertificate($location, $name, $mode, $find_type, $query, $valid_only, $number)
    {
        $certs = $this->SetupCertificates($location, $name, $mode);
        if ($find_type != null) {
            $certs = $certs->Find($find_type, $query, $valid_only);
            return $certs->Item($number);
        } else {
            $cert = $certs->Item($number);
            return $cert;
        }
    }



    /**
     * @param mixed $content
     */
    public function setContent ($content)
    {
        $this->content = $content;
    }

}



Вот код который инициализирует подпись

Код:
   public function execute()
    {
        $task = $this->taskManagement->GetNextJob();

        if (empty($task))
            return false;

        if (file_exists($task['file_root'])){
            $this->signatureService->query = $task['query'];
            
            $content = base64_encode(file_get_contents('/home/admin/web/48270.vps.local/public_html/content/files/photo.jpg'));//$task['file_root']
           
            $this->signatureService->findType = (int)$task['encoding_type'];
            $this->signatureService->setContent($content);
            $this->signatureService->sign();
        }
    }



Все работает до строчки $sm = $this->SignedData->Sign($this->Signer, 0, STRING_TO_UCS2LE);

Отредактировано пользователем 29 сентября 2018 г. 10:51:01(UTC)  | Причина: Не указана

Offline IGORPzzz  
#10 Оставлено : 29 сентября 2018 г. 11:02:18(UTC)
IGORPzzz

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

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

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