Форум КриптоПро
	 » 
	Общие вопросы
	 » 
	Общие вопросы
	 » 
	Как использовать СКЗИ Крипто-ПРО совместно с 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