Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Как использовать СКЗИ Крипто-ПРО совместно с curl
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Татьяна Я бы всё-таки рекомендовала использовать хранилища специального пользователя, если нужно всё делать под специальным пользователем. В хранилище компьютера сертификат ставят почти так же:
1. скопировать ключи в папку /var/opt/cprocsp/keys/ без логина пользователя 2. потом узнать id контейнера /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc -machinekeys 3. затем добить сертификат в хранилище /opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\%id_контейнера%' -file ИМЯ_ФАЙЛА_СЕРТИФИКАТА.cer -store mmy 4. поставить crl сертификат certmgr -inst -crl -store ca -file %путь_к_файлу% 5. затем поставить корневые сертификаты certmgr -inst -store root -file cacer.p7b
Поясню откуда такое появилось желание. Речь идет о сервере на котором работает Web приложение. Само приложение находится в домашней папке пользователя, который является разработчиком или администратором прикладной системы. Web cервер включен в группу этого пользователя, чтобы запускать это приложение от своего имени. Далее, чтобы безопастникам не давать права разработчика/администратора, чтобы они не накосячили в системе, хочу дать отдельного пользователя из под которого они будут сами ставить/обновлять сертификаты. Было бы логично, если они ставили эти сертификаты в хранилище компьютера, чтобы ими могло пользоваться приложение. Именно поэтому есть желание идентифицировать сертификаты по email, чтобы процесс обновления сертификатов был прозрачен для системы. Т.е. сертификат истек у пользователя появилось сообщение при выполнении бизнес операции, что сертификат просрочен и далее техподдекржка не мучает разработчиков/админов, а передает эту проблему сразу в службу безопастности, которая самостоятельно без участия прикладного админа обновляет нужные сертификаты. Если, то, что я хочу, можно реализовать красивее буду рад послушать. :) Отредактировано пользователем 15 марта 2013 г. 17:49:10(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 06.02.2008(UTC) Сообщений: 1,491 Откуда: Крипто-Про
Поблагодарили: 40 раз в 37 постах
|
Про хранилища компьютера понятно. Да, тогда можно дать права на директории, о которых я говорила. Автор: NTMan Именно поэтому есть желание идентифицировать сертификаты по email, чтобы процесс обновления сертификатов был прозрачен для системы. Т.е. сертификат истек у пользователя появилось сообщение при выполнении бизнес операции, что сертификат просрочен и далее техподдекржка не мучает разработчиков/админов, а передает эту проблему сразу в службу безопастности, которая самостоятельно без участия прикладного админа обновляет нужные сертификаты.
Если, то, что я хочу, можно реализовать красивее буду рад послушать. :) А что делать, если сертификатов с одним e-mail два(например, админы новый поставили, а старый не удалили)? Ругаться? Выбирать первый попавшийся? Выбирать более новый? Проверять у какого из сертификатов есть назначение "проверка подлинности клиента", которое необходимо для работы curl? Пытаться использовать одностороннюю аутентификацию? А если есть два пользователя с одинаковым ящиком (например, сотрудники тех поддержки, у которых указан общий ящик тех поддержки)? Для каждой информационной системы ответ свой, поэтому эта часть и перекладывается на разработчиков информационной системы. Так как libcurl предоставляет C-шный интерфейс, мы предполагали что встраивание будет на C, там без труда с помощью нашего API можно получить из хранилища сертификат по любым интересным вам параметрам (например, выбрать все сертификаты с заданным e-mail, потом среди них выбрать сертификаты с назначением "проверка подлинности клиента", а потом выбрать среди них самый новый или выбрать сертификат по фамилии владельца и по назначению или любым другим нужным вам способом), а затем получить thumbprint данного сертификата. |
Татьяна ООО Крипто-Про |
1 пользователь поблагодарил Татьяна за этот пост.
|
NTMan оставлено 20.03.2013(UTC)
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Еще вопрос, а можно ли завести несколько контейнеров на одного пользователя. И как между контейнерами переключаться из curl?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Это нормально??? Код:$ /opt/cprocsp/sbin/amd64/cpconfig -defprov -view_type
Listing Available Provider Types:
Provider type Provider Type Name
_____________ _____________________________________
75 Crypto-Pro GOST R 34.10-2001 KC1 CSP
$ /opt/cprocsp/sbin/amd64/cpconfig -defprov -setdef -provtype 75 -provname "Crypto-Pro GOST R 34.10-2001 KC1 CSP"
An error occurred in running the program.
/dailybuilds/CSPbuild/CSP/src/cpconfig_unix/defprov.cpp:87:Error setting the default provider name.
Error number 80090020 (2148073504).
Unknown error 18446744071562657824
Error code:-2146893792, Unknown error: 80090020.
Отредактировано пользователем 25 марта 2013 г. 9:57:36(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Татьяна, вопрос о нескольких контейнерах для одного пользователя\машины до сих пор актуален. Не могли бы Вы ответить?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.05.2013(UTC) Сообщений: 3
|
Автор: NTMan Если интерсно вот пример на PHP для включение в ваше SDK Код:$ch = curl_init($address);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY');
//curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_LOCAL_MACHINE:MY');
curl_setopt($ch, CURLOPT_SSLCERT, '53be6850031bf03bff056fd5215a46c07b2248d6');
if(isset($proxy)) curl_setopt($ch, CURLOPT_PROXY, $proxy);
$response = curl_exec($ch);
echo 'Error code: ' . curl_errno ($ch)."\n";
echo 'Curl error: ' . curl_error($ch)."\n";
И это реально работает?? Вы передаете вместо сертификата его хэш, вместо типа сертификата - адрес контейнера, и ЭТО работает? Уже несколько дней пытаюсь решить подобную задачу, и сертификат почему-то не принимается(указываю абсолютный путь к нему). Ради интереса попробовал и ваш метод... Но сервер даже до сертификата не доходит - сразу на CERTTYPE ругается. У кого-нибудь есть рабочий вариант отправки запроса cUrl'ом по TLS с использованием личного сертификата (на PHP)? Отредактировано пользователем 22 мая 2013 г. 21:30:17(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Автор: mmk Автор: NTMan И это реально работает?? Вы передаете вместо сертификата его хэш, вместо типа сертификата - адрес контейнера, и ЭТО работает? Ну если вы читали эту тему то видели, что мне Татьяна подсказала так сделать, а код рабочий. PHP кстати правильно запускаете?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 22.05.2013(UTC) Сообщений: 3
|
Автор: NTMan PHP кстати правильно запускаете? Наверное нет..А как правильно? Через PHP вообще отказывается работать. Наверное из-за того, что используется стандартная версия cUrl. А вот на C++, подключив curl, прилагаемый к КриптоПро CSP, коннект идет, даже без указания CERTTYPE. Вы у себя заменили библиотеку? Не помешало вызовам cUrl для других серверов без аутентификации по сертификату?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 33 Сказал(а) «Спасибо»: 6 раз Поблагодарили: 1 раз в 1 постах
|
Автор: mmk Наверное нет..А как правильно?
Для CentOS 5.9: Делаешь симлинк с курловской библиотеки идущей совместно с КриптоПРО чтобы имя было как у дистрибутивной либы $ ln -s /opt/cprocsp/lib/amd64/libcpcurl.so.4.2.0 /opt/cprocsp/lib/amd64/libcurl.so.3 А сам php запускается с переопределением LD_LIBRARY_PATH Например: LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64 ./inter.php Соответственно для php-fpm и для апача будут свои ньюансы.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 11.06.2013(UTC) Сообщений: 11 Откуда: Россия
|
Автор: NTMan
Для CentOS 5.9:
Делаешь симлинк с курловской библиотеки идущей совместно с КриптоПРО чтобы имя было как у дистрибутивной либы $ ln -s /opt/cprocsp/lib/amd64/libcpcurl.so.4.2.0 /opt/cprocsp/lib/amd64/libcurl.so.3
А сам php запускается с переопределением LD_LIBRARY_PATH Например: LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64 ./inter.php
Соответственно для php-fpm и для апача будут свои ньюансы.
NTMan, как разобравшийся во всех этих радостях человек, можете поделиться опытом? В либах cprocsp библиотеки libcurl у меня нет, поэтому я сделал все возможные симлинки на библиотеку, которая у меня имелась ln -s /usr/lib/libcurl.so.4.2.0 /opt/cprocsp/lib/amd64/libcurl.so.4.2.0Следуя докам, зарегистрировал даже путь к имеющейся библиотеке ./cpconfig -ini \config\apppath -add string libcurl.so /usr/lib/libcurl.so.4.2.0Все равно у меня не получается достучаться по https с использованием сертификатов, даже используя ваш рабочий код: $url = "https://icrs.nbki.ru/products/B2BRequestServlet"; curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY'); curl_setopt($ch, CURLOPT_SSLCERT, '0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); $responce = curl_exec($ch);Какие подводные камни я мог упустить? + еще вопрос, при правильно настроенном curl, получалось ли у вас делать запросы по https прямо через консоль: curl https://icrs.nbki.ru/products/B2BRequestServlet?
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Как использовать СКЗИ Крипто-ПРО совместно с curl
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close