Add SNI settings for SSL URLs that are proxied, fixes #3204

main
Jordi Boggiano 10 years ago
parent 7b13507dd4
commit 8dad846613

@ -93,6 +93,14 @@ final class StreamContextFactory
break;
}
// add SNI opts for https URLs
if ('https' === parse_url($url, PHP_URL_SCHEME)) {
$options['ssl']['SNI_enabled'] = true;
if (version_compare(PHP_VERSION, '5.6.0', '<')) {
$options['ssl']['SNI_server_name'] = parse_url($url, PHP_URL_HOST);
}
}
// handle proxy auth if present
if (isset($proxy['user'])) {
$auth = urldecode($proxy['user']);

@ -133,14 +133,23 @@ class StreamContextFactoryTest extends \PHPUnit_Framework_TestCase
$context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET')));
$options = stream_context_get_options($context);
$this->assertEquals(array('http' => array(
'proxy' => 'tcp://proxyserver.net:80',
'request_fulluri' => true,
'method' => 'GET',
'header' => array("Proxy-Authorization: Basic " . base64_encode('username:password')),
'max_redirects' => 20,
'follow_location' => 1,
)), $options);
$expected = array(
'http' => array(
'proxy' => 'tcp://proxyserver.net:80',
'request_fulluri' => true,
'method' => 'GET',
'header' => array("Proxy-Authorization: Basic " . base64_encode('username:password')),
'max_redirects' => 20,
'follow_location' => 1,
), 'ssl' => array(
'SNI_enabled' => true,
'SNI_server_name' => 'example.org'
)
);
if (version_compare(PHP_VERSION, '5.6.0', '>=')) {
unset($expected['ssl']['SNI_server_name']);
}
$this->assertEquals($expected, $options);
}
public function testHttpsProxyOverride()
@ -151,13 +160,22 @@ class StreamContextFactoryTest extends \PHPUnit_Framework_TestCase
$context = StreamContextFactory::getContext('https://example.org', array('http' => array('method' => 'GET')));
$options = stream_context_get_options($context);
$this->assertEquals(array('http' => array(
'proxy' => 'ssl://woopproxy.net:443',
'request_fulluri' => true,
'method' => 'GET',
'max_redirects' => 20,
'follow_location' => 1,
)), $options);
$expected = array(
'http' => array(
'proxy' => 'ssl://woopproxy.net:443',
'request_fulluri' => true,
'method' => 'GET',
'max_redirects' => 20,
'follow_location' => 1,
), 'ssl' => array(
'SNI_enabled' => true,
'SNI_server_name' => 'example.org'
)
);
if (version_compare(PHP_VERSION, '5.6.0', '>=')) {
unset($expected['ssl']['SNI_server_name']);
}
$this->assertEquals($expected, $options);
}
/**

Loading…
Cancel
Save