Форум КриптоПро
	 » 
	Общие вопросы
	 » 
	Общие вопросы
	 » 
	Как использовать СКЗИ Крипто-ПРО совместно с curl
	 
	
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 22.09.2014(UTC) Сообщений: 16  Откуда: FyljhhfСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: NTMan  Автор: 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 и для апача будут свои ньюансы. Решаю аналогичную задачу в Ubuntu 14.04.  До манипуляций ldd возвращает это:
 
 ldd /usr/lib/php5/20121212/curl.solinux-vdso.so.1 =>  (0x00007fff3f3fe000)
 libcurl.so.4 => /usr/lib/x86_64-linux-gnu/libcurl.so.4 (0x00007fc3ee56c000)
 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc3ee34e000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc3edf87000)
 libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007fc3edd54000)
 librtmp.so.0 => /usr/lib/x86_64-linux-gnu/librtmp.so.0 (0x00007fc3edb3a000)
 libssl.so.1.0.0 => /lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007fc3ed8db000)
 libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007fc3ed501000)
 libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007fc3ed2bb000)
 liblber-2.4.so.2 => /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2 (0x00007fc3ed0ab000)
 libldap_r-2.4.so.2 => /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2 (0x00007fc3ece5a000)
 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc3ecc41000)
 /lib64/ld-linux-x86-64.so.2 (0x00007fc3eea0e000)
 libgnutls.so.26 => /usr/lib/x86_64-linux-gnu/libgnutls.so.26 (0x00007fc3ec982000)
 libgcrypt.so.11 => /lib/x86_64-linux-gnu/libgcrypt.so.11 (0x00007fc3ec703000)
 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc3ec4ff000)
 libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007fc3ec233000)
 libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007fc3ec004000)
 libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fc3ebe00000)
 libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007fc3ebbf4000)
 libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007fc3eb9d9000)
 libsasl2.so.2 => /usr/lib/x86_64-linux-gnu/libsasl2.so.2 (0x00007fc3eb7be000)
 libgssapi.so.3 => /usr/lib/x86_64-linux-gnu/libgssapi.so.3 (0x00007fc3eb57f000)
 libtasn1.so.6 => /usr/lib/x86_64-linux-gnu/libtasn1.so.6 (0x00007fc3eb36b000)
 libp11-kit.so.0 => /usr/lib/x86_64-linux-gnu/libp11-kit.so.0 (0x00007fc3eb129000)
 libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fc3eaf23000)
 libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007fc3ead1f000)
 libheimntlm.so.0 => /usr/lib/x86_64-linux-gnu/libheimntlm.so.0 (0x00007fc3eab15000)
 libkrb5.so.26 => /usr/lib/x86_64-linux-gnu/libkrb5.so.26 (0x00007fc3ea88d000)
 libasn1.so.8 => /usr/lib/x86_64-linux-gnu/libasn1.so.8 (0x00007fc3ea5ec000)
 libhcrypto.so.4 => /usr/lib/x86_64-linux-gnu/libhcrypto.so.4 (0x00007fc3ea3b8000)
 libroken.so.18 => /usr/lib/x86_64-linux-gnu/libroken.so.18 (0x00007fc3ea1a3000)
 libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fc3e9f9b000)
 libwind.so.0 => /usr/lib/x86_64-linux-gnu/libwind.so.0 (0x00007fc3e9d71000)
 libheimbase.so.1 => /usr/lib/x86_64-linux-gnu/libheimbase.so.1 (0x00007fc3e9b63000)
 libhx509.so.5 => /usr/lib/x86_64-linux-gnu/libhx509.so.5 (0x00007fc3e991a000)
 libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007fc3e9660000)
 libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007fc3e9427000)
 
 Если я пытаюсь обратиться из консоли с помощью curl к сайту требующему сертификат, я получаю ошибку  Цитата:curl: (35) error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm LD_PRELOAD, если я им пользуюсь верно, не помог, выдаётся ошибка  Цитата:ERROR: ld.so: object './opt/cprocsp/lib/amd64.libcpcurl.so.4.2.0' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored. Из командного файла: Цитата:#!/bin/sh
 ................
 LD_PRELOAD="./opt/cprocsp/lib/amd64.libcpcurl.so.4.2.0" curl -X POST -d ${REQUEST}
 Попробовал задать LD_LIBRARY_PATH Цитата:LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64export LD_LIBRARY_PATH
 ldd стало выдавать вот это:
 
 ldd /usr/lib/php5/20121212/curl.so/usr/lib/php5/20121212/curl.so: /opt/cprocsp/lib/amd64/libcurl.so.4: no version information available (required by /usr/lib/php5/20121212/curl.so)
 linux-vdso.so.1 =>  (0x00007fffd3bfe000)
 libcurl.so.4 => /opt/cprocsp/lib/amd64/libcurl.so.4 (0x00007f9d4fd56000)
 libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d4fb15000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d4f74e000)
 libidn.so.11 => /usr/lib/x86_64-linux-gnu/libidn.so.11 (0x00007f9d4f51b000)
 librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f9d4f313000)
 libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9d4f0f9000)
 libcapi20.so.4 => /opt/cprocsp/lib/amd64/libcapi20.so.4 (0x00007f9d4eee4000)
 libssp.so.4 => /opt/cprocsp/lib/amd64/libssp.so.4 (0x00007f9d4ed61000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f9d500bd000)
 libcpext.so.4 => /opt/cprocsp/lib/amd64/libcpext.so.4 (0x00007f9d4ebf8000)
 libcapi10.so.4 => /opt/cprocsp/lib/amd64/libcapi10.so.4 (0x00007f9d4eae4000)
 liburlretrieve.so.4 => /opt/cprocsp/lib/amd64/liburlretrieve.so.4 (0x00007f9d4e9e0000)
 librdrsup.so.4 => /opt/cprocsp/lib/amd64/librdrsup.so.4 (0x00007f9d4e8b9000)
 libasn1data.so.4 => /opt/cprocsp/lib/amd64/libasn1data.so.4 (0x00007f9d4e155000)
 libpkivalidator.so.4 => /opt/cprocsp/lib/amd64/libpkivalidator.so.4 (0x00007f9d4e02d000)
 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d4de28000)
 libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9d4db24000)
 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d4d81e000)
 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9d4d607000)
 libcpalloc.so.0 => /opt/cprocsp/lib/amd64/libcpalloc.so.0 (0x00007f9d4d506000)
 libjemalloc.so.0 => /opt/cprocsp/lib/amd64/libjemalloc.so.0 (0x00007f9d4d3ed000)
 libcplib.so.4 => /opt/cprocsp/lib/amd64/libcplib.so.4 (0x00007f9d4d2dc000)
 libocsp.so.4 => /opt/cprocsp/lib/amd64/libocsp.so.4 (0x00007f9d4d18e000)
 libcpasn1.so.4 => /opt/cprocsp/lib/amd64/libcpasn1.so.4 (0x00007f9d4d014000)
 
 Но тогда curl начинает выдавать вот это: Цитата:curl: /opt/cprocsp/lib/amd64/libcurl.so.4: no version information available (required by curl)curl: (2) Failed initialization
 Что я делаю не так, сможет кто-нибудь помочь заставить это работать? А если я использую curl в PHP, то выдаётс ошибка Цитата:Error code: 58Curl error: not supported file type 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY' for certificate
 Отредактировано пользователем 21 ноября 2014 г. 14:53:04(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 22.09.2014(UTC) Сообщений: 16  Откуда: FyljhhfСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Оказалось, что это всё же консольный курл не работает.Для PHP с правильно указанным отпечатком всё заработало.
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 22.09.2014(UTC) Сообщений: 16  Откуда: FyljhhfСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Автор: Hayate  Оказалось, что это всё же консольный курл не работает.Для PHP с правильно указанным отпечатком всё заработало.
 Ага, ещё момент. Это всё работает, если в консольке выполнить  Цитата:LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64; export LD_LIBRARY_PATH; Из-под юзера для которого всё крипто-добро было помещено в хранилище, и потом если от имени этого же юзера запускать из консоли скрипт. Логичным образом, если скрипт запускает nginx, или если закрыть-открыть консоль, то всё это уже не работает. Поэтому вопрос, как лучше поступить с сертификатами и ключами, поместить их в хранилище локальной машины? Это тогда будет Цитата:curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_LOCAL_MACHINE'); вместо  Цитата:curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY'); так, или я не верно понимаю? Или как можно добавить сертификаты для пользователей от имени которых работают php и nginx? Их же в passwd нет, для них даже su не сделать. Да и нельзя su для них делать... А по поводу крипто-про библиотеки, пересобирать php пока что кажется неоптимальным вариантом, отсюда вопрос, добавление в /etc/php5/fpm/pool.d/www.conf строки env[LD_LIBRARY_PATH] = /opt/cprocsp/lib/amd64 должно заставить php-fpm подхватить эту библиотеку?  Потому как  putenv("LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64"); и  shell_exec('LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64;env[LD_LIBRARY_PATH] = /opt/cprocsp/lib/amd64;'); не помогли. Отредактировано пользователем 22 ноября 2014 г. 13:46:19(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 21.12.2014(UTC)
 Сообщений: 5
 Откуда: Msk
 
 | 
            
		      
                Господа, у кого получилось решить проблему? Скрипт: Код:<?php
        if ($ch = curl_init ()) {
                curl_setopt_array ($ch, array (
                        CURLOPT_URL => 'https://ssl.***.ru',
                        //CURLOPT_PORT => 450,
                        CURLOPT_POSTFIELDS => array ('Type' => 'Login', 'Login' => '12', 'Password' => '12'),
                        CURLOPT_USERAGENT => "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)",
                        CURLOPT_POST => 1,
                        CURLOPT_RETURNTRANSFER => 1,
                        CURLOPT_CONNECTTIMEOUT => 30,
                        CURLOPT_SSL_VERIFYPEER => 0,
                        CURLOPT_SSLENGINE => 'gost',
                ));
                echo '<pre>error: '. curl_errno ($ch). ' "'. curl_error ($ch). '"';
                echo '<pre>'. curl_exec ($ch);
                curl_close ($ch);
        }
?>
 Категорически не работает, просто https://ssl.***.ru не доступен для доступа пхпшного curl'a Но коносольный curl достукивается до сайта. Что нужно сделать, чтобы и скрипт стал работать?? ОС - Линукс | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 24.12.2014(UTC)
 Сообщений: 1
 
 | 
            
		      
                Кто-нибудь решил проблему? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 22.09.2014(UTC) Сообщений: 16  Откуда: FyljhhfСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                У меня работает только в случае запуска php скрипта из консоли. По крону запускается скрипт и получает-отправляет нужные данные.  Заставить отработать curl в случае когда выполнение инициирует посетитель обратившись браузером не вышло, да особо и не стояло такой задачи.  Такой вариант тоже не работает? Отредактировано пользователем 26 декабря 2014 г. 8:46:46(UTC)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 21.12.2014(UTC)
 Сообщений: 5
 Откуда: Msk
 
 | 
            
		      
                Ну это же костыли совсем =) 
 Из строки curl криптопрошный работает, но все-таки хотелось бы, чтобы работала libcurl в пхп скрипте
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 22.09.2014(UTC) Сообщений: 16  Откуда: FyljhhfСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Ну в моём случае у фреймворка есть функционал консольных команд, и обмен данными идёт долго, не комильфо заставлять юзера ждать. Поэтому мне так даже удобнее. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 21.12.2014(UTC)
 Сообщений: 5
 Откуда: Msk
 
 | 
            
		      
                В этом плане Вам повезло... а вот в нашем случае нужно, чтобы работы была в браузере непосредственно в форматье запрос-ответ пользователем. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 21.12.2014(UTC)
 Сообщений: 5
 Откуда: Msk
 
 | 
            
		      
                А техподдержка тут не бывает? Хотелось бы получить от Вас совет | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	Форум КриптоПро
	 » 
	Общие вопросы
	 » 
	Общие вопросы
	 » 
	Как использовать СКЗИ Крипто-ПРО совместно с curl
	 
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close