php 5.6 — php 5.6 update stream_socket_client — больше не открывается сокет

$certFile = 'ful_path/yourcert.pem';

$context = stream_context_create();

$result = stream_context_set_option($context, 'ssl', 'local_cert',
$certFile);

$result = stream_context_set_option($context, 'ssl', 'verify_peer',
false);

$result = stream_context_set_option($context, 'ssl', 'verify_host',
false);

$result = stream_context_set_option($context, 'ssl',
'allow_self_signed', true);$sock = stream_socket_client('tls://www.somewhere.com:9999',
$errno,$errstr, 30, STREAM_CLIENT_CONNECT, $context);

добавили: www.somewhere.com к сертификатам сервера
удалили &$
проверил срок действия yourcert.pem
если не переводить весь код в curl, я застрял. это должно быть что-то настолько очевидное, как нос на моем лице … но что …

0

Решение

Во-первых, позвольте мне сказать это:

PHP5.6 по умолчанию использует хранилища сертификатов CA, управляемые вашей операционной системой. Если вы не подключаетесь к DNS-имени, которое предоставляет самозаверяющий сертификат или что-то подобное, вам, вероятно, вообще не нужен контекст SSL.

Прежде чем делать что-либо еще, попробуйте подключиться без всякого контекста ssl. Если сертификат удаленного сайта действителен и подписан любым стандартным центром сертификации, он должен «просто работать» автоматически в PHP 5.6.

Тем не менее … в вашем фрагменте кода есть несколько очень сомнительных вещей. Действительно невозможно понять, в чём заключается настоящая проблема, не зная больше о том, что вы пытаетесь сделать, поэтому я просто переберу все это.

$result = stream_context_set_option($context, 'ssl', 'local_cert',
$certFile);

^ Вы подключаетесь к сайту, который требует ВЫ предоставить сертификат, который проверяет удаленный сервер? Если нет (и это почти наверняка так), вы не должны указывать "local_cert" вариант.

$result = stream_context_set_option($context, 'ssl', 'verify_peer',
false);

^ Это ужасная идея, поскольку она подвергает вас атакам «Человек посередине». Вам следует никогда делайте это, если вы не тестируете что-либо в одноразовом сценарии. НЕ ДЕЛАЙТЕ ЭТОГО.

$result = stream_context_set_option($context, 'ssl', 'verify_host',
false);

^ Это даже не вещь. Нет никаких "verify_host" вариант в PHP.

$result = stream_context_set_option($context, 'ssl',
'allow_self_signed', true);

Итак … в общем, нет хорошего способа ответить на это с информацией, которую вы предоставили. Но я указал на очевидные проблемы …

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]