Подтвердить что ты не робот

Запрос скручивания терпит неудачу на SSL?

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

    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

Любые идеи о причине

4b9b3361

Ответ 2

Я столкнулся с подобной загадочной ошибкой при работе с сторонней библиотекой. Я попробовал 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 в то время.

Итак, не позволяйте выводам curl_error() вводить вас в заблуждение. Вместо этого используйте curl_errno(), чтобы получить код ошибки правильный, который в этом случае был фактически 56, CURLE_RECV_ERROR. Неправильное имя хоста...

Ответ 3

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

curl_setopt ($ curl, CURLOPT_SSL_VERIFYHOST, 0);

У меня была такая же ошибка, и я работал отлично.

Ответ 4

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

Ответ 5

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

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

Итак, я проверил конфигурацию 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;

Ответ 6

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