У меня есть ошибка, я надеюсь, что кто-то может пролить немного света. Я получаю данные из клиентского API, и это работает ... 90% времени. Примерно в 1/10 (но с произвольной частотой) curl_exec возвращает false с ошибкой:
OpenSSL SSL_connect: SSL_ERROR_SYSCALL при подключении к api.site.com:443
IЯ проверил многочисленные темы на эту ошибку, и во всех случаях я вижу, что проблема происходит 100% времени для человека. Кто-нибудь имел дело с чем-то подобным? Если он работает иногда, а иногда не работает, где может быть проблема (сайт / сервер или API-интерфейс)?
Я экспериментировал с другими настройками, и ничто не устранило проблему. Я пробовал с и без CURLOPT_PINNEDPUBLICKEY, с и без CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, с и без принудительного использования версий HTTP и SSL. Всегда происходит сбой, когда я устанавливаю их неправильно, поэтому я почти уверен, что у меня выбраны правильные версии. Код существует в пользовательском компоненте Joomla, который был стабильным до этого переключения API. Вот мой код:
$headers = array(
'X-apikey: '.$this->apikey,
"Cache-Control: no-cache",
);
$url = $this->url;
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_2,
CURLOPT_PINNEDPUBLICKEY => '/path/to/api.site.com.pubkey.der',
));
$data = curl_exec($curl);
$result = json_decode($data);
curl_close($curl);
Версия PHP: 7.3.10
версия curl: 7.66.0
версия библиотеки openSSL: OpenSSL 1.1.1d 10 сентября 2019
Вывод из комментария hanshenrik (удалена информация о компании):
Вывод ошибки:
string (385) "* Попытка xxx.xxx.xxx.xxx:443 ... *TCP_NODELAY установлен * Подключен к порту api.site.com (xxx.xxx.xxx.xxx) 443 (# 0) * ALPN, предлагая http / 1.1 * успешно установить местоположение для проверки сертификата: * CAfile: / usr / local / etc / openssl@ 1.1 / cert.pem CApath: /usr/local/etc/openssl@1.1/certs * OpenSSL SSL_connect: SSL_ERROR_SYSCALL при подключении к api.site.com:443 * Закрытие соединения 0 "
Успешный вывод
string (1324) "* Попытка xxx.xxx.xxx.xxx:443 ... * TCP_NODELAY set * Подключено к порту api.site.com (xxx.xxx.xxx.xxx) 443 (# 0) *ALPN, предлагающий http / 1.1 * успешно установить места проверки сертификатов: * CAfile: /usr/local/etc/openssl@1.1/cert.pem CApath: /usr/local/etc/openssl@1.1/certs * SSL-соединение с использованием TLSv1. 2 /ECDHE-RSA-AES256-GCM-SHA384 * ALPN, сервер не согласен с протоколом * Сертификат сервера: * тема: C = US;ST = Иллинойс;L = Чикаго;O = название компании;CN = *. Site.com * дата начала: 14 мая 15:20:46 2019 по Гринвичу * дата истечения срока: 8 августа 15:41:00 2020 GMT * эмитент: C = США;ST = Аризона;L = Скоттсдейл;O = GoDaddy.com, Inc .;OU = http://certs.godaddy.com/repository/; CN = Go Daddy Secure Certificate Authority - G2 * SSL-сертификат подтвердите. > GET / конечная точка / id? Fields = field1, field2 и т. Д. HTTP / 1.1 Хост: api.site.com Принимать: / X-apikey: xxxxx Cache-Control: no-cache * Пометить пакет как неподдержка многоразового использования