Сбой запроса на SSL? - PullRequest
       40

Сбой запроса на SSL?

19 голосов
/ 07 октября 2010

У меня есть этот код

    if(ereg("^(https)",$url))
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    // execute, and log the result to curl_put.log
    $result = curl_exec($curl);


    $error = curl_error($curl);

Указана ошибка

SSL read: error:00000000:lib(0):func(0):reason(0), errno 104

Любые идеи по делу

Ответы [ 6 ]

30 голосов
/ 04 июля 2013

Я столкнулся с подобной загадочной ошибкой при работе со сторонней библиотекой.Я попробовал CURLOPT_SSL_VERIFY[PEER|HOST], но это не имело никакого значения.Мое сообщение об ошибке было похоже:

SSL read: error:00000000:lib(0):func(0):reason(0), errno 54

Поэтому я посетил http://curl.haxx.se/libcurl/c/libcurl-errors.html, в поисках кода ошибки 54.

CURLE_SSL_ENGINE_SETFAILED (54) Failed setting the selected SSL crypto engine as default!

Это было неправильно - я делал другие HTTPSзапросы с использованием curl в других частях приложения.Поэтому я продолжал копать и нашел этот вопрос, R & RCurl: Ошибка 54 в libcurl , в которой был этот гем:

Вывод, который вы видите, происходит из lib / ssluse.cИсходный код libcurl и упомянутое здесь «errno» - это не код ошибки libcurl, а действительная переменная errno в то время.1019 * вводит вас в заблуждение.Вместо этого используйте curl_errno () , чтобы получить правильный код ошибки, который в данном случае на самом деле был 56, CURLE_RECV_ERROR.Было неверное имя хоста ...

12 голосов
/ 07 октября 2010

При использовании SSL убедитесь, что у вас включено расширение openssl из php.ini.

1 голос
/ 23 сентября 2016

У меня была такая же проблема.Оказалось, что ssl в целевой системе имел плохую конфигурацию.

После проверки модуля php curl, версии GuzzleHttp, версии openssl я назвал ссылку в браузере, и она заработала.Но с curl --tlsv1 -kv <a href="https://www.example.com" rel="nofollow">https://www.example.com</a> на консоли все еще была ошибка.

Итак, я проверил конфигурацию ssl на https://www.ssllabs.com/ssltest/ Он был оценен с B. И там, где какой-то сетевой протокол статуса сертификата (OCSP)ошибок я не видел раньше.Наконец я изменил свою конфигурацию в целевой системе на предложения в https://cipherli.st/, перезапустил веб-сервер, и все заработало.Новый рейтинг на ssllabs теперь A +.

Моя конфигурация nginx (Ubuntu 14.04, nginx 1.4.6-1ubuntu3.5):

ssl     on;
ssl_certificate /etc/ssl/certs/1_www.example.com_bundle.crt;
ssl_certificate_key     /etc/ssl/private/www.example.com.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
#ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify off; # Requires nginx => 1.3.7
ssl_dhparam /etc/ssl/private/dhparams.pem;
ssl_trusted_certificate /etc/ssl/startssl.ca.pem;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; www.example.com; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
0 голосов
/ 09 августа 2013

У меня была та же ошибка, напечатанная функцией curl_error, но это не обязательно связано с SSL. Точный номер ошибки лучше распечатать с помощью функции curl_errno, и оттуда можно лучше диагностировать. В моем случае он вернул мне код ошибки 52, и я мог отлаживать оттуда, фактически другой сервер не отправлял никаких данных.

0 голосов
/ 05 ноября 2011

добавить это:

curl_setopt ($ curl, CURLOPT_SSL_VERIFYHOST, 0);

У меня была та же ошибка, и у меня все работало нормально.

0 голосов
/ 07 октября 2010

Я думаю, что вы хотите использовать CURLOPT_SSL_VERIFYHOST, а не CURLOPT_SSL_VERIFYPEER

...