Доброго времени суток всем. Есть один сайт https://auth.js.sign.eu.iit.com.ua, который обрывает соединение при попытке обратиться к нему через прокси средствами Zend_Http_Client. При этом :- обращение через CURL и file_get_contents для сайта https://auth.js.sign.eu.iit.com.ua работает.
- обращение через Zend_Http_Client к другим сайтам работает (напр. https://ya.ru)
Пакетным сниффером Wireshark выявлено, что CURL и file_get_contents работают по протоколу TLS 1.2, а Zend_Http_Client использует TLS 1.0 Помогите плс. загрузить страницу https://auth.js.sign.eu.iit.com.ua средствами Zend_Http_Client из ZendFramework 1 используя прокси-сервер
Вот проблемный кусок кода
| Код | <?PHP defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/'));
set_include_path('/media/diosrc/www/libs/ZendFramework-1.11.11/');
// Инклуд модуля с автозагрузчиком классов от ZendFramework . require_once 'Zend/Loader/Autoloader.php'; // Инициализация автозагрузчика первым обращением. После этого он начинает работу. $autoloader = Zend_Loader_Autoloader::getInstance(); $options = array( 'adapter' => 'Zend_Http_Client_Adapter_Proxy', 'proxy_host' => '10.10.10.228', 'proxy_port' => 3128, 'ssltransport' => 'tls', 'ssl' => array( //'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT, 'SNI_enabled' => true, 'SNI_server_name' => 'auth.js.sign.eu.iit.com.ua' //'SNI_server_name' => $host ) );
// $url = 'https://ya.ru'; $url = 'https://auth.js.sign.eu.iit.com.ua'; $client = new Zend_Http_Client($url, $options); $client->setMethod(Zend_Http_Client::GET); $response = $client->request(); echo $response->getBody(); ?>
|
Возвращает страницу с кодом 400
| Код | Bad Request Your browser sent a request that this server could not understand.
|
Wireshark: Проходит рукопожатие, обмен сертификатами, получение тикета. Спотыкается при передаче закриптованных данных:
| Код | Secure Sockets Layer >TLSv1 Record Layer: Encrypted Alert >>Content Type: Alert (21) >>Version: TLS 1.0 (0x0301) >>Length: 32 >>Alert Message: Encrypted Alert
|
Вот работающий код с использованием функции file_get_contents
| Код | <?PHP //$url = 'http://ya.ru'; //$url = 'https://ya.ru'; $url = 'https://auth.js.sign.eu.iit.com.ua';
$host = parse_url($url, PHP_URL_HOST);
$aContext = array( 'http' => array( 'proxy' => 'tcp://10.10.10.228:3128', ), 'ssl' => array( 'SNI_enabled' => true, 'SNI_server_name' => 'auth.js.sign.eu.iit.com.ua' ) );
$cxContext = stream_context_create($aContext);
$sFile = file_get_contents($url, false, $cxContext); echo $sFile; ?>
|
Вот рабочий код с использованием CURL
| Код | <?php //$url = 'https://ya.ru'; // $url = 'https://yahoo.com'; $url = 'https://auth.js.sign.eu.iit.com.ua'; $proxy = '10.10.10.228:3128'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXY, $proxy); { curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'SSLv3'); } {// Отключаем проверки. Теперь доступ по HTTPS к сайтам с самоподписными сертификатами работает. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); } $text = curl_exec($ch); echo "CURLINFO_HTTP_CODE=", curl_getinfo($ch, CURLINFO_HTTP_CODE); if (!$text) { // echo 'FAIL!'; echo "\n"; trigger_error(curl_error($ch)); } echo $text; curl_close($ch); ?>
|
|