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

Чтение страницы SSL с помощью CURL (php)

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

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

также: "Подробности: SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не выполнена"

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

Мой вопрос: как отправить сертификат 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,
    );

Любые предложения были бы замечательными, Эндрю

4b9b3361

Ответ 1

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

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

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

Дополнительная информация на сайте PHP: curl_setopt()

Ответ 2

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

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

что все магии, CURL теперь может проверять сертификаты.

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

Ответ 3

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

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

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

curl_setopt($ch, CURLOPT_SSLVERSION,3)

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

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

Вы не отправляете сертификат SSL. Кажется, что проблема связана с сертификатом SSL, поскольку он установлен на хосте, с которым вы связываетесь. Используйте опцию -k или -insecure, чтобы пройти жалобу.

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

Ответ 7

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

<Connector protocol="HTTP/1.1" SSLEnabled="true" ... ciphers="SSL_RSA_WITH_RC4_128_SHA"/>