base64_encode для подписи сообщения
Добрый день. Есть несколько вопросов по реализации подписи на php.
Зачем перед подписью сообщения происходит base64_encode? После unsign необходимо дополнительно делать base64_decode. Попробовал убрать эти base64_encode - после unsign возвращается пустая строка.
Посмотрели пример на https://cpdn.cryptopro.ru/content/cades/phpcades-samples.html. Ваш способ подписи отличается от этого примера. Есть ли разница в выходной сигнатуре?
Вообще все работает отлично, но вопрос в том, подойдет ли эта сигнатура для запросов к ЕСИА.
Используем эту библиотеку для авторизации https://github.com/ekapusta/oauth2-esia. Написали Signer, который работает с апи докер контейнера с криптопро. ЕСИА возвращает ошибку авторизации и непонятно в чем дело.
Добрый день!
Есть несколько вопросов по реализации подписи на php
С подписью документов на PHP возникла одна непреодолимая сложность, а именно я не нашел способа добавить второго подписанта (cosign). Подробнее я написал об этом тут: https://github.com/dbfun/cryptopro/issues/1#issuecomment-531151426
Зачем перед подписью сообщения происходит base64_encode? После unsign необходимо дополнительно делать base64_decode. Попробовал убрать эти base64_encode - после unsign возвращается пустая строка.
Делается это для подписания бинарных данных, предварительно устанавливается способ ввода эти данных: $sd->set_ContentEncoding(1); $sd->set_Content(base64_encode($content));, и это работает. Возможно, для теста это не нужно делать. Документации по этому поводу мало, очень многое делалось экспериментально.
Посмотрели пример на https://cpdn.cryptopro.ru/content/cades/phpcades-samples.html. Ваш способ подписи отличается от этого примера. Есть ли разница в выходной сигнатуре?
Возможно, они поменяли пример на сайте. Или я взял пример не с сайта, а из репозитория, в нем также есть примеры на PHP. Не могу точно сказать.
Вообще все работает отлично, но вопрос в том, подойдет ли эта сигнатура для запросов к ЕСИА.
Не могу сказать. Вариант, для которого используется контейнер - подписание файлов. Для HTTP запросов есть curl, пропатченный КриптоПро (он также есть в контейнере). Но я его не пробовал использовать, не было ни нужды, ни возможности.
Или я взял пример не с сайта, а из репозитория, в нем также есть примеры на PHP
Скиньте, пожалуйста, ссылку на репозиторий
Скиньте, пожалуйста, ссылку на репозиторий
Я брал .rpm пакет, который скачивается с сайта КриптоПро после регистрации. Из-за лицензии этот пакет нельзя куда-либо выкладывать. Содержимое можно посмотреть через rpm2cpio cprocsp-pki-2.0.0-amd64-phpcades.rpm | cpio -idmv.
Спасибо, нашли пример из пакета и он такой же как у вас. А если использовать подписание через командную строку, например
shell_exec('/scripts/sign dd45247ab9db600dca42cc36c1141262fa60e3fe 12345678');
там я не увидел преобразования к base64 но выводит она подобную base64 строку
но выводит она подобную base64 строку Это специфика работы программы cryptcp. Если не ошибаюсь, такое поведение нельзя переделать. Вообще, мой взгляд, там много странностей работы.
Чтобы подписанный документ выдавался не в кодировке base64, надо указать опцию -der:
/opt/cprocsp/bin/amd64/crytpcp -der -sign dn "CN=Тест" /path/to/file /path/to/file.p7s
Типа такого.