Заметка с исслдованием и возможным решением проблемы.
У меня возникла на Ubuntu 14.10 и php 5.6.9 из ppa, но я видел баг репорты и с другим окружением.
И так после обновления с 5.5.24 до 5.6.9 появилась проблема с подключением к одному из удаленных Soap сервисов по https.
Начала выдаваться ошибка Could not connect to host. При чем на 5.5 все работало.
Начав гуглить проблему я наткнулся на баг с библиотекой openssl в Ubuntu (но я встречал и про debian).
https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371
Похоже на мой случай и похоже это касается не только PHP, но и Python и др. сред, которые работают с ssl.
Похоже проблема в том, что openssl начал использовать криптографический протокол TLS 1.1 или 1.2 принудительно, а многие среды оказались не готовы к этому.
Один из выходов это откатить openssl или поискать более новую версию, но это может поломать зависимости на сервере. Поэтому лучше поискать обходное решщение на PHP.
Поиски вывели меня на этот баг репорт
https://bugs.php.net/bug.php?id=68855
и на эту тему
https://www.howtoforge.com/community/threads/soap-error-after-new-php.67715/
а она в свою очередь на эти вопросы
http://stackoverflow.com/questions/25142227/unable-to-connect-to-wsdl
http://stackoverflow.com/questions/21698192/php-soap-call-through-https/30725826
В моем случае следующие параметры для SoapClient помогли. Главное тут это отключаение верификации ssl в stream context.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
$soapParams = [ 'login' => $this->request['user'], 'password' => $this->request['password'], 'trace' => true, 'connection_timeout' => 10, 'default_socket_timeout' => 10, "exceptions" => true, 'soap_version' => SOAP_1_1, 'cache_wsdl' => WSDL_CACHE_NONE, 'location' => 'https://link/', "stream_context" => stream_context_create( [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ] ] ) ]; |
Возможно кому-то поможет этот workaround или что-то из приложенных ссылок.