logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Vic589632147  
#1 Оставлено : 14 сентября 2016 г. 12:48:31(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Добрый день.

на нашем сервере установлен php 5.5.9
Мы не компилировали его из исходников, а установили из репозитория.

Существуют ли в природе уже скомпилированные версии ваших продуктов для Ubuntu?
У нас стоит Linux 3.13.0-85-generic #129-Ubuntu SMP Thu Mar 17 20:50:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux


Мы хотим проверять подписанные в браузере пользователями данные на стороне сервера и
посмотреть:
- данные электронной подписи пользователя,
- действительна ли она,
- подписанные ей данные.

Что нам нужно сделать на сервере, чтобы эти данные получать в php?

Offline cross  
#2 Оставлено : 14 сентября 2016 г. 14:45:55(UTC)
cross


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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 627
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 95 раз в 87 постах
Что бы загрузить в php расширение оно должно быть собрано с той же версией php в которую он будет грузиться. Т.к. версий дистрибутивов много мы не собираем расширение сами а даем исходники для самостоятельной компиляции. Это достаточно просто сделать.


Если собирать совсем не хочется, можно дергать утилиты командной строки (cryptcp) для проверки подписи. Но они дают крайне ограниченный набор информации.
Анатолий Беляев (cross на cryptopro.ru)
Offline Vic589632147  
#3 Оставлено : 14 сентября 2016 г. 14:54:19(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Автор: cross Перейти к цитате
Что бы загрузить в php расширение оно должно быть собрано с той же версией php в которую он будет грузиться. Т.к. версий дистрибутивов много мы не собираем расширение сами а даем исходники для самостоятельной компиляции. Это достаточно просто сделать.


Если собирать совсем не хочется, можно дергать утилиты командной строки (cryptcp) для проверки подписи. Но они дают крайне ограниченный набор информации.


Просто - это вот тут: http://cpdn.cryptopro.ru...es/phpcades-install.html ?

У нас есть лицензия на версию 3.6, по этой ссылке про установку 4.0. Подойдет ли наша лицензия к этой версии?
Offline Vic589632147  
#4 Оставлено : 15 сентября 2016 г. 10:48:06(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Вот что мы сделали.

Получили подпись на страничке https://cryptopro.ru/certsrv/certrqma.asp

Подписали этой подписью надпись "Hello World" на страничке https://www.cryptopro.ru...des/demopage/simple.html

Полученный результат сохранили в файл hw.txt

Установили пачку программ:
$ ls -1
certmgr
cpverify
cryptcp
csptest
csptestf
der2xer
genkpim
inittst
nmcades
ocsputil
tsputil
wipefile

Установили какую-то цепочку сертификатов отсюда: http://www.cryptopro.ru/certsrv/certcarc.asp
./certmgr -list
Certmgr 1.0 (c) "CryptoPro", 2007-2010.
program for managing certificates, CRLs and stores

=============================================================================
1-------
Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash : 0x046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before : 05/08/2014 13:44:24 UTC
Not valid after : 05/08/2019 13:54:03 UTC
PrivateKey Link : No
=============================================================================

[ErrorCode: 0x00000000]

И теперь пытаемся получить из сохраненного зашифрованного файла какие-нибудь данные:

cryptcp -verify hw.txt h.txt

----------------------------------------------------- начало вывода
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU, support@cryptopro.ru
Valid from 05.08.2014 13:44:24 to 05.08.2019 13:54:03

Certificate chain is not checked for this certificate:
RDN:CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU, support@cryptopro.ru
Valid from 05.08.2014 13:44:24 to 05.08.2019 13:54:03

The certificate or certificate chain is based on an untrusted root.
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?Y

Certificate chains are checked.
Folder '/home/pilotsbrothers/Загрузки/':
/home/pilotsbrothers/Загрузки/hw.txt... Signature verifying...
Signer: RU, Victor
Skipping the signature due to signer certificate is not in certificate criterion.
Error: Signature.
/dailybuildsbranches/CSP_4_0/CSPbuild/CSP/samples/CPCrypt/DSign.cpp:743: 0x200001F9
[ErrorCode: 0x200001f9]
----------------------------------------------------- окончание вывода

После изучения вывода появилось несколько вопросов.
1. Можно ли избавиться от вопроса "Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?"?
Ключики -nochain и -norev не помогают - вопрос все равно задается.

2. Почему появляется этот вопрос и что нужно сделать, чтобы он не появлялся?

3. В результирующем файле лежит вот что: "йeЎj+•", совсем не похоже на изначальную строку ("Hello World").
Что нужно сделать, чтобы получить исходную строку?


У нас на сайте пользователи подписывают своими подписями текстовые строки и отправляют на сервер.
Мы хотели бы при получении этих данных получить из этой подписанной строки следующие данные:
- кто подписал
- до какой даты действительна подпись
- исходную строку, которую подписал пользователь.

Какой последовательностью команд мы можем получить эти данные?

Отредактировано пользователем 15 сентября 2016 г. 11:07:31(UTC)  | Причина: Не указана

Offline Vic589632147  
#5 Оставлено : 15 сентября 2016 г. 11:37:36(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Пока мы ждем от вас ответ на предыдущее сообщение, пытаемся собрать библиотеку для php

команда eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh --64`; make -f Makefile.unix

выдает ошибку

/usr/bin/ld: cannot find -lcppcades

Как исправить эту ошибку?
Offline Vic589632147  
#6 Оставлено : 15 сентября 2016 г. 16:54:50(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Ау, тут есть кто-нибудь?

Скажите, можно надеяться на ответы или нет?

Offline Vic589632147  
#7 Оставлено : 15 сентября 2016 г. 18:37:22(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Несмотря на ошибку при компиляции модуля, в папке с результатами компиляции лежат файлы для подключения к php.

Мы создали символическую ссылку, как описано в вашей документации.

При попытке запустить php скрипт получаем ошибку:


# php -r '$o = new CPStore();'

PHP Warning: PHP Startup: php_CPCSP: Unable to initialize module
Module compiled with module API=20100525
PHP compiled with module API=20121212
These options need to match
in Unknown on line 0
PHP Fatal error: Class 'CPStore' not found in Command line code on line 1


То есть не сходится номер API у вашей библиотеки и исходников с сайта php

Мы скачали исходники на версию 5.5.9, которая на нашей машине с ubuntu.

подскажите, какие исходники нужно скачать, чтобы сошлись версии API у php и вашего модуля?
Offline Vic589632147  
#8 Оставлено : 16 сентября 2016 г. 12:08:34(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Мне, конечно, приятно общаться здесь самому с собой.
Но, может, вы что-нибудь ответите?

Расскажу, как удалось скомпилировать so для php без ошибок - ручками поставили линк в папке amd64 на libcppcades по аналогии с другими файлами *.so

Возможно у вас что-то с Makefile.unix - не ставится нужная ссылка.

Мы, конечно, можем еще долго ковыряться с вашими продуктами, но вы вроде себя позиционируете как ведущего поставщика решений.

Может, пора уже соответствовать заявленному и как-то помочь пользователям?
Offline Vic589632147  
#9 Оставлено : 16 сентября 2016 г. 13:11:38(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

С помощью костыля, описанного выше, соединили php с вашим расширением.

Попытка запустить ваш тестовый файл провалилась:

$ php -f /opt/cprocsp/src/phpcades/test_extension.php
PHP Fatal error: Call to a member function get_Certificates() on a non-object in /opt/cprocsp/src/phpcades/test_extension.php on line 12


Вот код файла:
----------------------------------------- начало php кода -----------------------------------------
<?php
//Вспомогательные функции предварительной инициализации
function SetupStore($location, $name, $mode)
{
$store = new CPStore();
return $store->Open($location, $name, $mode);
}

function SetupCertificates($location, $name, $mode)
{
$store = SetupStore($location, $name, $mode);
$certs = $store->get_Certificates();
return $certs;

}

function SetupCertificate($location, $name, $mode,
$find_type, $query, $valid_only,
$number)
{
$certs = 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;
}
}

function test_CPSignedData_Sign_Verify()
{
try{
$content = "test content";
$address = "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)
return "Certificate not found";

$signer = new CPSigner();
$signer->set_TSAAddress($address);
$signer->set_Certificate($cert);

$sd = new CPSignedData();
$sd->set_Content($content);

$sm = $sd->Sign($signer, 0, STRING_TO_UCS2LE);
printf("Signature is:\n");
printf($sm);
printf("\n");
$sd->Verify($sm, 0, VERIFY_SIGNATURE_ONLY);
return 1;
}catch(Exception $e)
{
printf($e->getMessage());
}
}

if(test_CPSignedData_Sign_Verify() == 1)
{
printf("TEST OK\n");
}else
{
printf("TEST FAIL\n");
}

?>


----------------------------------------- окончание php кода -----------------------------------------


Скажите, что в нем поправить, чтобы мы могли удостовериться, что расширение php работает?
Где посмотреть документацию на объекты, их методы ?

Offline cross  
#10 Оставлено : 16 сентября 2016 г. 14:34:48(UTC)
cross


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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 627
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 95 раз в 87 постах
Цитата:
function SetupStore($location, $name, $mode)
{
$store = new CPStore();
return $store->Open($location, $name, $mode);
}

вот тут надо заменить return $store->Open($location, $name, $mode);
на
Цитата:
$store->Open($location, $name, $mode); return $store;

Обьекты и интерфейс полностью скопированы с обьектов CADESCOM ( http://cpdn.cryptopro.ru...tent/cades/cadescom.html )
Отдельной документации на расширение нет. Детали методов всегда можно подсмотреть в исходниках расширения.

+ Судя по выводу certmgr в 4 ответе вы установили корневой сертификат в хранилище предназначенное для сертификатов пользователей, а нужно было в хранилище root.

PS: Ответы на форуме разработчики дают по мере появления свободного времени. Более оперативная консультация ведется на портале support.cryptopro.ru при наличии соответствующих сертификатов технической поддержки.
Анатолий Беляев (cross на cryptopro.ru)
Offline Vic589632147  
#11 Оставлено : 16 сентября 2016 г. 15:52:20(UTC)
Vic589632147

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.09.2016(UTC)
Сообщений: 9
Откуда: Far

Автор: cross Перейти к цитате

PS: Ответы на форуме разработчики дают по мере появления свободного времени. Более оперативная консультация ведется на портале support.cryptopro.ru при наличии соответствующих сертификатов технической поддержки.


Это понятно. Но вот выше я спрашивал - работает ли наша лицензия на версию 3.6?
Если да, то я готов задавать вопросы там.

Автор: cross Перейти к цитате

+ Судя по выводу certmgr в 4 ответе вы установили корневой сертификат в хранилище предназначенное для сертификатов пользователей, а нужно было в хранилище root.


И вот тут как раз можно было бы дать ссылку на страничку, где написано, как это сделать или просто написать нужную команду.
Вы ведь уже выкроили несколько минут времени и дошли сюда.
А то теперь придется до следующей недели ждать ответа :(




Offline Alexw  
#12 Оставлено : 13 апреля 2017 г. 18:18:54(UTC)
Alexw

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: Vic589632147 Перейти к цитате
команда eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh --64`; make -f Makefile.unix
выдает ошибку
/usr/bin/ld: cannot find -lcppcades
Как исправить эту ошибку?


Попробуйте сделать симлинки в папку с библиотеками программ (/usr/lib/) на файлы библиотеки КриптоПРО libcppcades (из /opt/cprocsp/lib/amd64/).

Offline Alexw  
#13 Оставлено : 20 апреля 2017 г. 18:58:23(UTC)
Alexw

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

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

Сказал(а) «Спасибо»: 1 раз
Автор: cross Перейти к цитате
Цитата:
function SetupStore($location, $name, $mode)
{
$store = new CPStore();
return $store->Open($location, $name, $mode);
}

вот тут надо заменить return $store->Open($location, $name, $mode);
на
Цитата:
$store->Open($location, $name, $mode); return $store;

Обьекты и интерфейс полностью скопированы с обьектов CADESCOM ( http://cpdn.cryptopro.ru...tent/cades/cadescom.html )
Отдельной документации на расширение нет. Детали методов всегда можно подсмотреть в исходниках расширения.


Можете написать / выложить рабочий пример проверки ЭП с помощью php-расширения? А то даже этот единственный тут совет по php-коду не помогает оживить пример http://cpdn.cryptopro.ru...es/phpcades-samples.html
Скрипт не может создать подпись:
Код:
The configuration data or license for this product is corrupt or not present. (0x8007064A)TEST FAIL

а при проверке уже готовых Base64-данных (полученных с помощью https://www.cryptopro.ru...des/demopage/simple.html) стабильно выдает
Код:
Invalid Signature. (0x80090006)TEST FAIL

причем эти же данные, если их поместить в файл (sign.txt.sgn), консольная утилита проверяет успешно командой:
Код:
/opt/cprocsp/bin/amd64/cryptcp -vsignf -dir ~ sign.txt  
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN: <...>
Valid from 09.08.2016 06:07:00 to 09.11.2017 06:17:00

Certificate chains are checked.
Folder './':
sign.txt... Signature verifying...    
     
 Signature's verified.
[ReturnCode: 0]


Вообще, часто на клиенте создают подпись с помощью КриптоПро ЭЦП Browser plug-in, а серверу нужно уметь проверять то, что пришло с клиента. Т.е. нужен хотя бы рабочий пример проверки ЭП вида:
----- BEGIN PKCS7 SIGNED -----
MIIaSwYJKoZIhvcNAQcCoIIaPDCCGjgCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG
<...>
----- END PKCS7 SIGNED -----
т.е. в формате PKCS7.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.