2015-02-16 5 views
0

Еще раз, еще один вопрос относительно cURL и SSL, поскольку я не могу найти ответы на соответствующие вопросы.setup cURL для SSL

У меня работает SSL на моем веб-сервере, с доверенным сертификатом и зелеными знаками в адресной строке браузера a.s.o., НЕ подписан сам. Так хорошо до сих пор.

Теперь я хочу общаться с скручиваются и использовать следующую функцию (данные POST не добавил):

function ssltest(){ 
     $post_data = ''; 
     $url = 'https://myserver/test.php'; 
     $ch = curl_init($url); 
     curl_setopt($ch, CURLOPT_MUTE, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
     //curl_setopt($ch, CURLOPT_CAINFO, 'sslstuff/cacert.pem'); 
     curl_setopt($ch, CURLOPT_CAINFO, 'sslstuff/false.pem'); 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     $output = curl_exec($ch); 
     curl_close($ch); 
     return $output; 
    } 

echo ssltest(); 

Как cacert.pem я использую этот, который я нашел в моем браузере, который, очевидно, идентично тому, что я нашел здесь http://curl.haxx.se/ca/cacert.pem В приведенном выше коде имеется файл false.pem. Что теперь ? Если этот файл пуст, на сервере нет ответа, но я протестировал его, чтобы вставить сертификат из другого предприятия из списка на curl.haxx.se. Я получаю тот же правильный ответ от сервера в качестве результата, как при правильном использовании. pem

В чем проблема? Что мне не хватает?

+0

* «В чем проблема?» * - В чем проблема? – jww

ответ

0

«нет ответа от сервера»

Я думаю, что это очень маловероятно. Я подозреваю, что нет HTTP ответ от сервера, но что согласование SSL не работает, но у вас нет ошибок в вашем коде. Если $ output === false, посмотрите на curl_error().

Возможно, вы захотите поиграть с VERIFYHOST и VERIFYPEER, чтобы точно определить причину проблемы.

+0

Нравится? Я сделал if ($ output! == false) return $ output; else return curl_error ($ ch); без разницы. И без сообщения об ошибке без вывода. – ddlab

+0

Извините, я попытался поймать сообщение об ошибке после закрытия curl. Теперь я получаю сообщение об ошибке: «Проверить параметры проверки сертификата: CAfile: sslstuff/false.pem CApath:/etc/ssl/certs», когда файл пуст (но все еще существует). Но если я использую ложный сертификат, отличный от правильного, ошибки по-прежнему нет, и веб-сайт отвечает – ddlab

+0

. Угадайте, самое простое решение: удалить всю строку с CURLOPT_CAINFO, так как правильный сертификат можно найти в/etc/ssl/certs на локальном компьютере :-) Я прав? – ddlab