Статус: Новичок
Группы: Участники
Зарегистрирован: 06.08.2019(UTC) Сообщений: 8  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 3 раз в 2 постах
|
Итак предыстория. Есть МИС, на линуксе. путем долгого выпиливания лобзиком удалось там поднять и крипто про и phpcades. В прошлом году даже удалось победить ФСС с их больничными, но на некоторое время пришлось криптопро отложить в сторонку и заняться другими делами. Есть такая штука как МДЛП и его надо внедрять, согласно api https://честныйзнак.рф/u...ysnogo-urovnya-v3.07.pdfПервый этап там получение кода (который успешно проходится) и затем этот полученный код, надо подписать своим сертификатом. Есть краткая инструкция по быстрому началу https://честныйзнак.рф/u..._dlya_izucheniya_API.pdfпо этой инструкции с помощью утилит командной строки подпись создается вообще без проблем /opt/cprocsp/bin/amd64/csptest -sfsign -sign -in code.txt -my 7ecf3608182fb033f2140f761e9be89e5472408d -base64 -detached -out signed_code.txt -add а вот из php начинаются проблемы набросал такой скрипт для проверки Код:
#!/usr/bin/php
<?php
function FindCertbySHA1HASH($sha1_hash)
{
$store = new CPStore();
$store->Open(CURRENT_USER_STORE, "my", STORE_OPEN_READ_ONLY);
$certs = $store->get_Certificates();
for($i = 1; $i <= $certs->Count(); $i++)
{
if(strtoupper($certs->Item($i)->get_Thumbprint()) == strtoupper($sha1_hash))
{
return $certs->Item($i);
}
}
return null;
}
$code = "5937b53c-73f4-4411-9b78-a39851c3954e";
$cert = FindCertbySHA1HASH('7ecf3608182fb033f2140f761e9be89e5472408d');
$signer = new CPSigner();
// $address = "http://cryptopro.ru/tsp/tsp.srf ";
// $signer->set_TSAAddress($address);
$signer->set_Certificate($cert);
var_dump( $signer->get_Certificate()->get_SubjectName());
var_dump( $signer->get_Certificate()->get_ValidFromDate());
var_dump( $signer->get_Certificate()->get_ValidToDate());
$sd = new CPSignedData();
$sd->set_Content($code);
try
{
$signature = $sd->Sign($signer, true, 0);
echo "Signature is:\n".$signature;
}
catch (Exception $e)
{
echo $e->getMessage()."\n";
}
?>
выводит Код:string(364) "OGRN=1142130007..... и т.д.""
string(19) "20.02.2020 06:17:46"
string(19) "20.02.2021 06:27:46"
No TSP Client license has been entered or TSP Client license is expired. (0xC2100140)
посмотрел, видимо это какая то встроенная и она закончилась Код:[root@bars2 amd64]# ./tsputil license
Type of license is : Standard
Duration : 28.11.2019 (Expired)
[ReturnCode: 0x00000000]
но ведь консольные утилиты работают, им это не мешает делать подпись?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,504   Сказал «Спасибо»: 554 раз Поблагодарили: 2249 раз в 1755 постах
|
Здравствуйте.
Так у Вас в реальном коде - есть использование TSP или нет? В примере - "закомментировано". |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.08.2019(UTC) Сообщений: 8  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 3 раз в 2 постах
|
Автор: Андрей *  Здравствуйте.
Так у Вас в реальном коде - есть использование TSP или нет? В примере - "закомментировано". и с комментированным и раскомментированным кодом поведение одинаковое. По идее не нужен же он мне. Но почему то запрашивался. P.S. Какой же все-таки хороший форум - не успели мне ответить, а я сумел подобрать ответ. Сейчас напишу в следующем сообщении
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.08.2019(UTC) Сообщений: 8  Сказал(а) «Спасибо»: 4 раз Поблагодарили: 3 раз в 2 постах
|
Автор: ibz  Итак предыстория. Есть МИС, на линуксе. путем долгого выпиливания лобзиком удалось там поднять и крипто про и phpcades. В прошлом году даже удалось победить ФСС с их больничными, но на некоторое время пришлось криптопро отложить в сторонку и заняться другими делами. Есть такая штука как МДЛП и его надо внедрять, согласно api https://честныйзнак.рф/u...ysnogo-urovnya-v3.07.pdfПервый этап там получение кода (который успешно проходится) и затем этот полученный код, надо подписать своим сертификатом. Есть краткая инструкция по быстрому началу https://честныйзнак.рф/u..._dlya_izucheniya_API.pdf Итак. Удалось подобрать правильные параметры для того чтобы правильно составить подпись, и мне удалось получить токен Я попробовал вместо метода Sign использовать SignCades добавил в конец скрипта кусок кода Код:
foreach( array(0, 1, 5, 0x5D, 0xFFFF) as $cades_type ) // соответствуют константам CADES_DEFAULT, CADES_BES, CADES_T, CADES_X_LONG_TYPE_1, PKCS7_TYPE
{
try
{
echo "\nCADES_TYPE = $cades_type\n";
$signature = $sd->SignCades($signer, $cades_type, true, 0);
echo "Signature is:\n".$signature;
}
catch (Exception $e)
{
echo $e->getMessage()."\n";
}
}
выяснил что один из типов подписей ( CADES_BES ) не требует TSP далее родился кусок кода который дал в итоге получить мне токен привожу для тех кто тоже будет пытаться подружиться с мдлп Код:
<?php
function FindCertbySHA1HASH($sha1_hash)
{
$store = new CPStore();
$store->Open(CURRENT_USER_STORE, "my", STORE_OPEN_READ_ONLY);
$certs = $store->get_Certificates();
for($i = 1; $i <= $certs->Count(); $i++)
{
if(strtoupper($certs->Item($i)->get_Thumbprint()) == strtoupper($sha1_hash))
{
return $certs->Item($i);
}
}
return null;
}
$code = "5937b53c-73f4-4411-9b78-a39851c3954e";
$cert = FindCertbySHA1HASH('7ecf3608182fb033f2140f761e9be89e5472408d');
$signer = new CPSigner();
$signer->set_Certificate($cert);
// $signer->set_Options(CERTIFICATE_INCLUDE_END_ENTITY_ONLY); // проверил, мдлп понимает и если всю цепочку сертификатов включать - но с этой опцией размер меньше всего
$sd = new CPSignedData();
$sd->set_ContentEncoding(BASE64_TO_BINARY);
$sd->set_Content(base64_encode($code));
try
{
$signature = $sd->SignCades($signer, CADES_BES, true, ENCODE_BASE64);
echo "Signature is:\n".$signature; // полученную сигнатуру надо почистить от \r\n и можно использовать для получения token'а
}
catch (Exception $e)
{
echo $e->getMessage()."\n";
}
Отредактировано пользователем 4 июня 2020 г. 13:12:17(UTC)
| Причина: Не указана
|
 1 пользователь поблагодарил ibz за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close