За последние 24 часа нас посетили 5004 программиста и 657 роботов. Сейчас ищут 208 программистов ...

SSL сертификаты и stream_socket_client

Тема в разделе "PHP для профи", создана пользователем undercloud, 14 мар 2019.

Метки:
  1. undercloud

    undercloud Новичок

    С нами с:
    22 май 2016
    Сообщения:
    7
    Симпатии:
    0
    Привет Форумчане!

    Нужно сделать обмен именно через stream_socket_client (про file_get_contents, fopen знаю, но нужен именно низкоуровневый способ прямого обмена)
    Если заменить ssl на tcp а порт на 80й то все отрабатывает как надо, подозреваю что дело в local_cert, а вернее в его отсутствии,
    в теме SSL - для меня дремучий лес, .pem .cert .key и иже с ними... Подскажите чего не хватает, как это сгенерировать, и что указать в контексте ssl опций

    Исходник тут

    https://gist.github.com/undercloud/d246473370aec7f19c2e42414ae00693

    P.S. В конце концов сгенерировал key.pem и cert.pem файлы через консоль с яндексом соединился и успешно обменялся данными - получил стартовую страницу

    $ openssl s_client -connect yandex.ru:443 -cert cert.pem -key key.pem -state

    установка опций в контекст ssl (local_cert,local_pk) никаких результатов не дала, подскажите куда копать?
     
  2. undercloud

    undercloud Новичок

    С нами с:
    22 май 2016
    Сообщения:
    7
    Симпатии:
    0
    Оказалось что проблема в stream_get_contents,и данные нужно читать через fgets,fgetc,stream_socket_recvfrom, но теперь ответ приходит в виде зашифрованных данных типа:

    >bÂev��h����$��q*�zhP#

    , как это побороть и получить нормальную строку?
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.284
    Симпатии:
    209
    скорее что-то не то с кодировками
     
  4. undercloud

    undercloud Новичок

    С нами с:
    22 май 2016
    Сообщения:
    7
    Симпатии:
    0
    Нет, "ответ" постоянно разный
     
  5. undercloud

    undercloud Новичок

    С нами с:
    22 май 2016
    Сообщения:
    7
    Симпатии:
    0
    вобщем решение такое - использовать стандартные файловые функции типа fwrite и fgetc или fgets, fread как ни странно тоже не работает