За последние 24 часа нас посетили 76278 программистов и 5375 роботов. Сейчас ищут 1677 программистов ...

stream_socket_client ssl

Тема в разделе "PHP для новичков", создана пользователем chertog, 16 сен 2016.

Метки:
  1. chertog

    chertog Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток, уважаемые форумчане.

    Реализовал механизм сокетов stream_socket_server - stream_socket_client. При переходе на ssl возникли определенные проблемы. Сервер запустился нормально, привожу код:

    PHP:
    1. $context = stream_context_create();
    2. stream_context_set_option($context, 'ssl', 'local_cert', $sert);
    3. stream_context_set_option($context, 'ssl', 'passphrase', '');
    4. stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
    5. stream_context_set_option($context, 'ssl', 'verify_peer', false);
    6.  
    7. $socket = stream_socket_server('ssl://' . $host, $errno, $errstr, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN, $context);
    Но клиент почему-то упорно отказывается подключаться к сокету, привожу код:

    PHP:
    1. $context = stream_context_create();
    2. stream_context_set_option($context, 'ssl', 'local_cert', $sert);
    3. stream_context_set_option($context, 'ssl', 'passphrase', '');
    4. stream_context_set_option($context, 'ssl', 'allow_self_signed', true);
    5. stream_context_set_option($context, 'ssl', 'verify_peer', false);
    6.  
    7. $socket = stream_socket_client('ssl://' .  $host, $errno, $errstr, 60, STREAM_CLIENT_CONNECT, $context);
    8.  
    9. if( ! $socket) {
    10.   die("Не подключено\n" . $errstr. " (" .$errno. ")\n");
    11. }
    Собственно на любую попытку подключения результата -- "Не подключено", $errstr - пусто, $errno - 0.

    Повторюсь, по tcp все работало, проблема именно с ssl. Подскажите, пожалуйста, что я делаю не так?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Посмотри обёртки/библиотеки для stream_socket_client если они заработают, можешь их код посмотреть.
     
    chertog нравится это.
  3. chertog

    chertog Новичок

    С нами с:
    16 сен 2016
    Сообщения:
    2
    Симпатии:
    0
    В общем, ребята, если кто столкнется с такой проблемой, вот решение:

    PHP:
    1. $context = stream_context_create();
    2.  
    3.   array(
    4.     'ssl' => array(
    5.         'verify_peer' => false,
    6.         'cafile' => $sert,
    7.         'peer_name' => $host,
    8.         'ciphers' => 'HIGH:!SSLv2:!SSLv3',
    9.         'disable_compression' => true,
    10.     )
    11.   )
    12. );
    13.  
    14. $socket = stream_socket_client("ssl://" . $ip . ':' . $port, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $context);
    где
    $sert - сертификат в формате .pem
    $host - хост вашего сайта (например, site.ru),
    $ip - ip адрес сокета,
    $port - порт сокета