diff --git a/src/Connector.php b/src/Connector.php index d132a74..eed8d91 100644 --- a/src/Connector.php +++ b/src/Connector.php @@ -23,25 +23,17 @@ public function create($host, $port) { return $this ->resolveHostname($host) - ->then(function ($address) use ($port, $host) { - return $this->createSocketForAddress($address, $port, $host); + ->then(function ($address) use ($port) { + return $this->createSocketForAddress($address, $port); }); } - public function createSocketForAddress($address, $port, $hostName = null) + public function createSocketForAddress($address, $port) { $url = $this->getSocketUrl($address, $port); - $contextOpts = array(); - if ($hostName !== null) { - $contextOpts['ssl']['SNI_enabled'] = true; - $contextOpts['ssl']['SNI_server_name'] = $hostName; - $contextOpts['ssl']['peer_name'] = $hostName; - } - $flags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT; - $context = stream_context_create($contextOpts); - $socket = stream_socket_client($url, $errno, $errstr, 0, $flags, $context); + $socket = stream_socket_client($url, $errno, $errstr, 0, $flags); if (!$socket) { return Promise\reject(new \RuntimeException( diff --git a/src/SecureConnector.php b/src/SecureConnector.php index fed2da2..f80c11b 100644 --- a/src/SecureConnector.php +++ b/src/SecureConnector.php @@ -18,8 +18,16 @@ public function __construct(ConnectorInterface $connector, LoopInterface $loop) public function create($host, $port) { - return $this->connector->create($host, $port)->then(function (Stream $stream) { - // (unencrypted) connection succeeded => try to enable encryption + return $this->connector->create($host, $port)->then(function (Stream $stream) use ($host) { + // (unencrypted) TCP/IP connection succeeded + + // set required SSL/TLS context options + $resource = $stream->stream; + stream_context_set_option($resource, 'ssl', 'SNI_enabled', true); + stream_context_set_option($resource, 'ssl', 'SNI_server_name', $host); + stream_context_set_option($resource, 'ssl', 'peer_name', $host); + + // try to enable encryption return $this->streamEncryption->enable($stream)->then(null, function ($error) use ($stream) { // establishing encryption failed => close invalid connection and return error $stream->close();