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