CURL, проблема с SSL сертификатом

Gamid

Новичок
CURL, проблема с SSL сертификатом

У платежной системы есть api для проведения транзакций.
Вот его описание (ссылка).
Вот код из мана:
PHP:
<?
$autoPayURL = "https://www.strictpay.com/autopay/autopay.php"; 
$myAccount = 12345; 
$email = urlEncode("[email protected]"); 
$password = urlEncode(base64_encode("mypassword")); 
$accessCode = urlEncode(base64_encode("myAccessCode")); 
$totalAmount = $totalAmountComputedFromAllPayments; 
$payList = "23456;10.34;Payment 1; 
34567;12.41;Payment 2; 
45678;15.09;Payment 3;";  
$myForm = "acctNumber=$myAccount"; 
$myForm .= "&email=$email"; 
$myForm .= "&password=$password"; 
$myForm .= "&accessCode=$accessCode"; 
$myForm .= "&totalAmount=$totalAmount"; 
$myForm .= "&payList=$payList";  
$curl = curl_init();
curl_setopt($curl, CURLOPT_HEADER, FALSE); // No Headers 
curl_setopt($curl, CURLOPT_POST, TRUE); // HTTP-Post Operation 
curl_setopt($curl, CURLOPT_URL, $autoPayURL); // Set the URL for StrictPay 
curl_setopt($curl, CURLOPT_POSTFIELDS, $myForm); // Set your form data 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // Receive Returned Data  
echo $ex = curl_exec($curl);  
if (!$ex) {         echo "Error: ".curl_error($curl); } 
elseif ($ex == "All Transactions Successfully Completed!") {         echo $ex; } 
else {         echo $ex; } 
?>
На попытку запроса curl возвращает:
Error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Пробовал подставлять:
PHP:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
вернул:
Error: SSL read: error:00000000:lib(0):func(0):reason(0), errno 0
Что можно попробвать еще?
 

dimagolov

Новичок
поищи по форуму (или по ману курла), у сертификатов есть несколько форматов, курлу нужен строго определенный.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
атключи праверку карневова агенства сиртификата
или подставь ему доверенные сертификаты, которыми он подписан,

или найми тех, кто понимает слова выше
 

Gamid

Новичок
PHP:
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, "https://www.strictpay.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);  
curl_setopt($ch, CURLOPT_CAINFO, getcwd()."/www.strictpay.com.crt");   
$result = curl_exec($ch);
if ( $result === false ) echo "<br>" . curl_error($ch);  
else echo $result;  curl_close($ch);
возвращает
SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
у сертификатов есть несколько форматов, курлу нужен строго определенный.
Попробовал crt и pem, но безрезультатно.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
PHP:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 

damngood

Мозг был, но ушел...
убери
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd()."/www.strictpay.com.crt");

Это пишем так:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 

Gamid

Новичок
PHP:
$ch = curl_init();    
curl_setopt($ch, CURLOPT_URL, "https://www.strictpay.com");   
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);    
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
echo $result = curl_exec($ch);   
if ( $result === false ) echo "<br>" . curl_error($ch);     
else echo $result;  curl_close($ch);
ответ
SSL read: error:00000000:lib(0):func(0):reason(0), errno 104
 

damngood

Мозг был, но ушел...
Порт нужен 443, а ты как я понимаю ломишься на 80. На работе у меня есть рабочий пример, если не выйдет подключиться после выставления порта, запостю сюда мини класс, которым сондиняюсь
 

Gamid

Новичок
Автор оригинала: damngood
Порт нужен 443, а ты как я понимаю ломишься на 80. На работе у меня есть рабочий пример, если не выйдет подключиться после выставления порта, запостю сюда мини класс, которым сондиняюсь
Тут очевидно, что не в порте дело. За класс был бы очень благодарен.

Автор оригинала: cDLEON
Я, надеюсь, ты не просто взял да переименовал crt в pem ?
Ну зачем же, есть специальные команды:)
 

Активист

Активист
Команда форума
Gamid
http://osdir.com/ml/web.curl.php/2007-02/msg00008.html

http://www.pdncommunity.com/pdn/board/message?board.id=wppro&thread.id=7495

http://www.google.ru/search?q= +SSL+read:+error:00000000:lib(0):func(0):reason(0),+errno+104&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox

1. Включи VERBOSE и посмотри что возвращается, скинь сюда лог.
2. Попробуй через SSH отладить curl
3. Возможно ответ от севрера 0-вой или timeout, у тебя в браузере та открывается ссылка твоя?
 

damngood

Мозг был, но ушел...
Как и обещал вот пример для тебя:

PHP:
$curl = curl_init();
curl_setopt($curl, CURLOPT_FAILONERROR, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // allow redirects
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // times out after 4s
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($curl, CURLOPT_URL, "https://www.strictpay.com");
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 GTB6");
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

$myAccount = 12345;
$email = urlEncode("[email protected]");
$password = urlEncode(base64_encode("mypassword"));
$accessCode = urlEncode(base64_encode("myAccessCode"));
$totalAmount = 123;
$payList = "23456;10.34;Payment 1;
34567;12.41;Payment 2;
45678;15.09;Payment 3;"; 

$myForm = "acctNumber=$myAccount";
$myForm .= "&email=$email";
$myForm .= "&password=$password";
$myForm .= "&accessCode=$accessCode";
$myForm .= "&totalAmount=$totalAmount";
$myForm .= "&payList=$payList";

curl_setopt($curl, CURLOPT_POST, TRUE); // HTTP-Post Operation
curl_setopt($curl, CURLOPT_POSTFIELDS, $myForm); // Set your form data

$data = curl_exec($curl);

print_r($data);
Класс убрал отсюда.
 

Активист

Активист
Команда форума
damngood
Ты мне скажи, как твой кусок непонятного кода связан с ошибкой
"SSL read: error:00000000:lib(0):func(0):reason(0), errno 104" ? И впредь, используй пожалуйста http://phpclub.ru/paste для вставки кода.
 

damngood

Мозг был, но ушел...
Активист
Мой кусок непонятного кода связан тут тем, что у меня нету "SSL read: error:00000000:lib(0):func(0):reason(0), errno 104"
 

Gamid

Новичок
damngood
Спасибо, пример работает!

Причина появления ошибок окзалась там, где и не искал - стоит убрать строку с CURLOPT_USERAGENT они вновь появляются.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
дурной веб-сервер не работает без указания User-Agent, мда, бывает
 
Сверху