Ошибка PHP 7.0 и SSL TLS 1.0

У меня проблема с SoapClient и PHP 7.0 для разбора wsdl.

Я получаю эту ошибку:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://ws.ocasa.com/testecommerce/service.asmx?wsdl' : failed to load external entity "https://ws.ocasa.com/testecommerce/service.asmx?wsdl"

Если вы поместите этот URL-адрес в браузер, вы увидите SOAP, а также в SoapUI он работает нормально.

Я использую laravel 5.4, и мой код:

$client = new \SoapClient('https://ws.ocasa.com/testecommerce/service.asmx?wsdl',
    ['soap_version'=>SOAP_1_2]);

Я заметил, что этот сайт находится под SSL TLS 1.0. Если я изменю PHP на 5.6, он отлично работает, но с PHP 7.0 он не работает.

Если я перейду на этот другой WSDL:

https://id3check.gb.co.uk/gbportalinternational/aspx/id3check_1b.asmx?WSDL

Все работает нормально.

Спасибо


person Joaquin Colella    schedule 28.06.2017    source источник
comment
вероятно, нефункциональный URL-адрес - это сервер, не предоставляющий действительный сертификат ssl для этого домена.   -  person Ivo P    schedule 28.06.2017
comment
Я думаю, что это вызвано старой версией TLS и используемым абсолютным шифром. Возможно, вы можете написать их, чтобы улучшить конфигурацию веб-сервера.   -  person René Höhle    schedule 28.06.2017


Ответы (1)


вы можете игнорировать плохой сертификат:

$endpoint = new SOAPClient($url,
    array(
      'soap_version'=>SOAP_1_2,
      'stream_context' => stream_context_create(
        array(
          'ssl' => array(
            'verify_peer' => false, 
            'verify_peer_name' => false
          )
        )
      )
    )
  );

Это было бы решением, если у вас нет доступа к мыльному серверу для исправления сертификата или если вы не можете иначе заставить свой сервер принять сертификат.

Это должно быть последнее решение, так как вы действительно игнорируете все предупреждения, что-то не так

person Ivo P    schedule 28.06.2017
comment
Но сертификат правильный. И когда вы это сделаете, вы отключите проверку. - person René Höhle; 28.06.2017
comment
см. также « title = «как заставить клиент php soap общаться со службой, работающей через ssl»> stackoverflow.com/questions/12373328/ - person Ivo P; 28.06.2017
comment
Таким образом, проблема возникает, когда я вызываю функцию. Вот код: $response = $this-›client-›__call(GenerarRetiros,array($params),[ 'soap_version'=›SOAP_1_2, 'stream_context' =› stream_context_create( array( 'ssl' =› array( ' verify_peer' =› false, 'verify_peer_name' =› false ) ) ) ]); - person Joaquin Colella; 28.06.2017