чтение страницы SSL с помощью CURL (php) - PullRequest
33 голосов
/ 06 февраля 2009

Я пытаюсь загрузить содержимое защищенной (использует https) веб-страницы с использованием библиотек php и curl.

Однако чтение не удалось, и я получил ошибку 60: «Проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке».

также «Сведения: SSL3_GET_SERVER_CERTIFICATE: сбой проверки сертификата»

Итак ... довольно понятные сообщения об ошибках.

У меня вопрос: как отправить SSL-сертификат (правильный?) И получить эту страницу, чтобы проверить его и впустить меня?

Также, вот мой массив опций на случай, если вам интересно:

    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYHOST => 1,
    );

Любые предложения будут великолепны, Andrew

Ответы [ 7 ]

49 голосов
/ 06 февраля 2009

Похоже, вы ошиблись в интерпретации ошибки. Мне кажется, что сайт, к которому вы подключаетесь, самоподписан или есть какая-то другая общая проблема Как и в обычном предупреждении браузера, вам проще всего отключить проверки.

Вам нужно установить CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST на FALSE. Это должно отключить две основные проверки. Возможно, они оба не обязательны, но это, по крайней мере, должно помочь вам.

Чтобы было ясно, это отключает функцию, предназначенную для защиты вас. Делайте это, только если вы проверили сертификат и сервер каким-либо другим способом.

Подробнее на сайте PHP: curl_setopt ()

21 голосов
/ 26 ноября 2012

Если вы хотите использовать одноранговую проверку SSL (ее отключение не всегда хорошая идея), вы можете использовать следующее решение для Windows во всем мире:

  1. Загрузите файл с корневыми сертификатами отсюда: http://curl.haxx.se/docs/caextract.html
  2. Добавить в php.ini:

curl.cainfo=C:/path/to/cacert.pem

это все волшебство, CURL теперь может проверять сертификаты.

(насколько я знаю, в Linux такой проблемы нет, по крайней мере, в Ubuntu)

6 голосов
/ 18 января 2013

Даже после следования советам по SO .. У вас все еще могут быть проблемы с ошибкой типа:

error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

проблема с версией SSL. Используйте следующее для версии 3

curl_setopt($ch, CURLOPT_SSLVERSION,3)

Я предполагаю, что вы включили проверку узла и узла и указали на фактический файл сертификата. Например.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
2 голосов
/ 10 июня 2010

Это «проблема» с openssl и VeriSign.

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

https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657

Мне пришлось импортировать эти промежуточные сертификаты с домашней страницы VeriSign или Firefox cert-database-export в мой список локальных ca-сертификатов, и после этого шага я смог использовать wget / curl для использования защищенного соединения без ошибок.

1 голос
/ 07 декабря 2012

Если это машина разработчика - вы также можете добавить этот сертификат в вашу систему. Как то так - https://www.globalsign.com/support/intermediate/intermediate_windows.php Это для WinXP, но работает и на других версиях Windows.

0 голосов
/ 28 апреля 2014

Это, по-видимому, ошибка openssl. Tomcat можно настроить для обхода этого в /etc/tomcat7/server.xml, ограничив список доступных шифров:

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>
0 голосов
/ 06 февраля 2009

Вы НЕ ОТПРАВЛЯЕТЕ сертификат SSL. Кажется, есть проблема с сертификатом SSL, поскольку он установлен на хосте, с которым вы связываетесь. Используйте опцию -k или --insecure, чтобы пропустить жалобу.

Ах. См. Ответ Райана Грэма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...