CURL, проблема с SSL сертификатом

westvovik

Новичок
Не могу понять в чем дело, до этого все работало

Пытаюсь забрать допустим картинку с сайта

$url = 'https://xxx.ru/img/no_user.jpg';

$timeout = 50;
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_VERBOSE, true);

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1'); // mPDF 5.7.4
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT , $timeout );
$data = curl_exec($ch);
echo $data;

Выдает пустоту, а в браузере картинку открывает в логах вот что

Trying 213.134.xxx.xxx..."
* Connected to xxx.ru (213.134.xxx.xxx) port 443 (#0)"
ALPN, offering http/1.1"
* SSL connection using TLS1.0 / ECDHE_RSA_AES_256_CBC_SHA1"
server certificate verification failed. CAfile: none CRLfile: none"
* Closing connection 0"

На серваке установлен сертификат купленный RapidSSL
 

westvovik

Новичок
ОС FreeBSD 9.1, можно поподробнее, в чем причина такого поведения?
И куда положить файлы, это как связано вообще с CURL?

Установлен nginx, настроен правильно, за исключением, что есть несколько виртуальных хостов, а сертификат на всех один пока сделан, но работало до этого, после обновления ПО такая проблема
 

AnrDaemon

Продвинутый новичок
Причина в том, что у тебя не установлен набор корневых сертификатов.
О чём тебе русским языком сказали в предыдущем сообщении.
 

fixxxer

К.О.
Партнер клуба
ОС FreeBSD 9.1, можно поподробнее, в чем причина такого поведения?
Понятия не имею, как это делается в современных freebsd, с тех пор, как я последнюю снес нафиг, там менеджер пакетов поменялся.
Гугли freebsd install CA certificates.
 

AnrDaemon

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

AnrDaemon

Продвинутый новичок
Нууу… как бэээ… Впрочем, это же FreeBSD… Ты прав…
 

Активист

Активист
Команда форума
Curl скомпилирован таким образом, что он не знает где искать сертификаты. Нужно опционально взять рутовый сертификат (Root CA cert) в формате PEM и положить куда-нибудь, где его нельзя будет заменить, и указать (через setopt CURLOPT_CAINFO ). Можно использовать системный сертификат (обычно объедененa все в etc), но есть ли пакет ca-certificates хз.

Вот рутовые сертификаты: https://www.rapidssl.com/legal/ , чем и какой цепочкой подписано - смотрите по самому сертификату.
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
CURLOPT_CAPATH тогда уж. А сертификаты обычно где-то в /etc/ssl/certs
 

westvovik

Новичок
Вообще странно все это, порт security/ca_root_nss с корневыми сертификатами устанавливается вместе с php-curl и он у меня установлен, сим линк некоторые предлагают
ln -s /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem он тоже есть, как так вдруг curl перестал видеть не понятно
 

Активист

Активист
Команда форума
Вообще странно все это, порт security/ca_root_nss с корневыми сертификатами устанавливается вместе с php-curl и он у меня установлен, сим линк некоторые предлагают
ln -s /usr/local/share/certs/ca-root-nss.crt /etc/ssl/cert.pem он тоже есть, как так вдруг curl перестал видеть не понятно
У вас курл скомпилирован таким образом, что он не имеет путей поиска сертификатов по умолчанию. Наличие или отсутствие CA сертификатов в системе не имеет при этом значения.
 

Активист

Активист
Команда форума
Т.е. при сборке curl должна быть указана опция --with-ca-bundle=/etc/ssl/cert.pem (а опция --without-ca-bundle должна отсутствовать).
 

westvovik

Новичок
А да посмотрел на конфиг curl да действительно не стояла опция CA_BUNDLE
Но прикол в том, что когда отмечаю пишет
You cannot select multiple options from the SSL radio
 

westvovik

Новичок
Во FreeBSD я при инсталляции порта не запускаю ./configure, я делаю make install clean

вот могу единственное что make showconfig

CA_BUNDLE=on: Install CA bundle for OpenSSL
COOKIES=on: Cookies support
CURL_DEBUG=off: cURL debug memory tracking
DEBUG=off: Build with debugging support
DOCS=on: Build and/or install documentation
EXAMPLES=on: Build and/or install examples
HTTP2=off: HTTP protocol version 2.0 support
IDN=off: International Domain Names support
IPV6=off: IPv6 protocol support
LDAP=off: LDAP protocol support
LDAPS=off: LDAP protocol over SSL support
LIBSSH2=off: SCP/SFTP support via libssh2
PROXY=on: Proxy support
RTMP=off: RTMP protocol support via librtmp
TLS_SRP=on: TLS-SRP (Secure Remote Password) support
====> GSSAPI Security API support: you have to select exactly one of them
GSSAPI_BASE=off: GSSAPI support via base system (Kerberos required)
GSSAPI_HEIMDAL=off: GSSAPI support via security/heimdal
GSSAPI_MIT=off: GSSAPI support via security/krb5
GSSAPI_NONE=on: Disable GSSAPI support
====> DNS resolving options: you can only select none or one of them
CARES=on: Asynchronous DNS resolution via c-ares
THREADED_RESOLVER=off: Threaded DNS resolver
====> SSL protocol support: you can only select none or one of them
GNUTLS=off: SSL/TLS support via GnuTLS
NSS=off: SSL/TLS support via NSS
OPENSSL=on: SSL/TLS support via OpenSSL
POLARSSL=off: SSL/TLS support via PolarSSL
WOLFSSL=off: SSL/TLS support via wolfSSL
===> Use 'make config' to modify these settings
 
Сверху