fsockopen ошибки с SSL - PullRequest
       21

fsockopen ошибки с SSL

0 голосов
/ 24 июня 2018

Я пытаюсь использовать fsockopen на локальном хосте с https в Windows, используя Wamp.Он работает нормально по http, но не по https.

Я создал сертификат с OpenSSL ( Как установить: OpenSSL + WAMP ) и объявил виртуальный хост в файле httpd-vhosts.conf.

Вот код PHP:

$fp = fsockopen("ssl://localhost", 443, $errno, $errstr, FSOCKOPEN_TIMEOUT); // same pb with ssl://www.localhost

, который генерирует следующие ошибки:

PHP Warning:  fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
PHP Warning:  fsockopen(): Failed to enable crypto
PHP Warning:  fsockopen(): unable to connect to ssl://localhost:443 (Unknown error)

У меня также есть следующее предупреждение в моем файле журнала ошибок ssl при запуске Apache(Я не знаю, может ли это быть связано):

[ssl:warn] [pid 6008:tid 596] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name

Ты хоть представляешь, что я сделал не так?

Спасибо!

1 Ответ

0 голосов
/ 24 июня 2018

Имейте в виду - если вы создаете ssl-сертификат локально, он обычно не является доверенным для клиентов (например, веб-браузер)

Когда вы следовали процессу создания сертификата, вас спрашивали об общем имени (CN).Это должен быть домен, на котором вы планируете обслуживать свою веб-страницу, или, если вы используете его только локально, это также может быть localhost.В вашем случае вы использовали что-то другое, что не соответствует ServerName или ServerAlias в вашей конфигурации Apache.

Atm Я не понимаю, почему вы хотите подключиться к localhost через ssl - с точки зрения безопасности этона самом деле не нужно.

В противном случае вы можете заставить своего клиента (php) не проверять действительность сертификата

<?php
$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false
    ]
]);
$fp = stream_socket_client("ssl://localhost", $errno, $errstr, ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);

Но делать это только (!) для локальных подключений

...