2013-12-04 2 views
0

Я запускаю скрипт на своем сайте, который подключается к Facebook, он работал нормально, пока мой сервер не обновил Centos с buggy version of Openssl. Моя проблема в том, что пока Redhat не выпустит новую версию, я застрял в этой ошибке.stream_socket_enable_crypto альтернативное или подобное решение

Это мой сценарий, как на самом деле запустить:

if(!stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) 
    { 

    throw new Exception('stream_socket_enable_crypto failed'); 

    } 

Очевидно теперь не может все время со следующей ошибкой:

PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: 
error:100AE081:elliptic curve routines:EC_GROUP_new_by_curve_name:unknown group 
error:1408D010:SSL routines:SSL3_GET_KEY_EXCHANGE:EC lib 

Так есть любая другая альтернатива, чтобы включить криптографию на ресурсе таких как завиток или что-то подобное. Как я могу это исправить?

+0

Использование STREAM_CRYPTO_METHOD_SSLv23_CLIENT вместо STREAM_CRYPTO_METHOD_TLS_CLIENT позволяет избежать проблемы? Если нет, я думаю, вам нужно понизить Openssl (если у вас есть root-доступ на вашем сервере). –

+0

Facebook специально попросил TLS, я не пробовал SSLv23. Моя поддержка хостинга решает, но проблема осталась, поэтому я не уверен, что это связано только с версией openssl, или также с версией centos – chifliiiii

+0

. Я получаю ту же ошибку с STREAM_CRYPTO_METHOD_SSLv23_CLIENT – chifliiiii

ответ

1

Это не решение, это просто аналогичный тест OpenSSL, запущенный на моей коробке.

Я обновил свой ящик CentOS сегодня, так что у меня есть последняя версия на нем:


# cat /etc/redhat-release 
CentOS release 6.5 (Final) 

версия OpenSSL является:


openssl.i686 0:1.0.1e-16.el6_5 
openssl-devel.i686 0:1.0.1e-16.el6_5 

И я побежал следующий тест на нем:


<?php 

    // open the socket 
    $f = @stream_socket_client("google.com" . ":" . "443", $err, $errstr, 30); 

    if (!$f) { 
    echo "Socket error: (" . $err . ") " . $errstr . "\n"; 
    exit; 
    } 

    // Start SSL, if needed 
    if([email protected]_socket_enable_crypto($f, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { 
    echo "Socket error. Can not start SSL encryption" . "\n"; 
    exit; 
    } 

    $request_headers = "GET/HTTP/1.1" . "\r\n"; 
    $request_headers .= "Host: www.google.com" . "\r\n"; 
    $request_headers .= "Connection: close" . "\r\n"; 
    $request_headers .= "\r\n"; 

    // send the HTTP headers 
    fputs ($f, $request_headers); 

    // read everything 
    $buf = ""; 
    while(!feof($f)) { 
    $buf .= fgets ($f, 8192); 
    } 

    // close the socket 
    fclose($f); 

    echo $buf; 

    echo "\n"; 
?> 

В конце я получил желаемый ответ без ошибок Open-SSL.

+0

Мои проблемы с этим скриптом https: // developers. facebook.com/docs/chat/, и они начали работу после обновления centos – chifliiiii