Как вызвать защищенный веб-сервис с помощью SoapClient, если Host не является доверенным - PullRequest
2 голосов
/ 21 октября 2011

Я хочу использовать PHP SoapClient для подключения к веб-сервису, который размещен в безопасном HTTP.Сервер, на котором размещен этот веб-сервис, не имеет сертификата SSL.Когда я попытался подключиться с помощью SoapClient, я получил следующую ошибку -

"Предупреждение: SoapClient :: __ construct () [function .-- construct]: SSL: фатальная ошибка протокола".

SOAPСтрока ошибки -> SOAP-ERROR: синтаксический анализ WSDL: PHP-SOAP не поддерживает транспорт 'http://schemas.microsoft.com/soap/tcp'

SOAP Код ошибки: WSDL.

Мой код

try {
            $client = new SoapClient('https://mywebservicelink?wsdl', array(
                'allow_self_signed' => 1,
                'verify_peer'       => 0,
                'trace'             => 1,
                'exceptions'        => 1,
            ));


            echo 'SOAP OBJECT<br />';
            echo '<pre>';
            print_r($client);
            echo '*****************<br />';
        } catch (Exception $e) {
            echo '<pre>';
            die(print_r($e));
       }

Hopeэтой информации будет достаточно.Кто-нибудь, пожалуйста, скажите мне, почему я получаю такую ​​ошибку?Это из-за выдачи сертификата?сертификат (файл crt)?

Спасибо за любую помощь

1 Ответ

1 голос
/ 07 октября 2013

Вы говорите, что на сервере , предоставляющем услугу, не установлен сертификат SSL . Затем вы спрашиваете , почему вы не можете подключиться к нему по защищенной ссылке https: //...

Я думаю, что вы ответили на вопрос самостоятельно :-) Сервер ДОЛЖЕН установить SSL-сертификат, чтобы принять безопасное соединение. В противном случае вы можете использовать только незащищенное соединение http: // ...

PHP SoapClient может загружать WSDL также через безопасное соединение. На самом деле я использую его на локальной машине devel с самозаверяющим сертификатом, и он работает.

Только в последнее время в PHP 5.5+ был добавлен новый параметр ssl_method (возможные значения: SOAP_SSL_METHOD_TLS, SOAP_SSL_METHOD_SSLv2, SOAP_SSL_METHOD_SSLv3 или SOAP_SSL_METHOD_SSLv23), чтобы задать некоторые проверки, но у меня нет необходимости проверять их, но у меня есть возможность проверки, но я не могу этого сделать.

Однако, если на вашем сервере установлен сертификат SSL, а ваш PHP SoapClient все еще не может подключиться к нему, вы можете настроить контекст потока, чтобы отключить проверку одноранговых узлов и принять самозаверяющие сертификаты. См. эту тему по теме.

...