Soap-error: синтаксический анализ wsdl: не удалось загрузить с https: // ***? wsdl

У меня есть клиент Soap, который работает с файлом pem

$url = "https://test_site.com/test?wsdl";
$action = 'http://xmlns.test_site.com/CoreObjects/GetData';

$client = new SoapClient(
    $url,
    [
        'stream_context'=> stream_context_create([
            'ssl' => [
                'local_cert'        => 'keys/includesprivatekey.pem',
                'passphrase'        => 'secret_word',
                'verify_peer'       => false,
                'verify_peer_name'  => false,
                'allow_self_signed' => true,
            ]
        ]),
        'cache_wsdl'    => WSDL_CACHE_NONE,
        'trace'         => 1,
        'exceptions'    => 1,
        'soap_version' => SOAP_1_2,
        'verifypeer' => false,
        'verifyhost' => false,
    ]
);

echo $client->__doRequest($xml, $url, $action, 1);

Когда я пытаюсь отправить запрос без файла local_cert, я получаю ответ от API с файлом сертификата NULL. Когда я добавляю файл local_cert, я получаю фатальное исключение:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://test_site.com/test?wsdl' : failed to load external entity "https://test_site.com/test?wsdl" in /srv/index.php

Это пример файла pem:

-----BEGIN CERTIFICATE-----
MIICfzCCAjGgAwIBAgIKAYoCQucBEgIF1TANBgkqhkiG9w0BAQQFADBdMQswCQYD
VQQGEwJVQTEOMAwGA1UEBxQFSVRfR08xDjAMBgNVBAoUBUlUX0dPMQ4wDAYDVQQL
FAVJVF9HTzEOMAwGA1UEDBQFSVRfR08xDjAMBgNVBAMUBUlUX0dPMB4XDTE1MDgy
ODA3NDAxMloXDTI1MD
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIICXDIBAAKBgQDhMZM9vKUJXMEHR60ZPF9vmGF5pJvx3jL5kY491sRmgnS4eluV
kvqSnXfrT+ZG82nGYZhRiLVnwKvE6/Zv8QnCSJsPCwTffEuF147CPW4/5ofMA97e
tn7xr557lckVALHwAfGiDXJLkMAsECc4AoGGOs9Iv6a5ru+AXlRDW63VGQIDAQAB
AoGAbUsBOiJXOs8AhAb+
-----END RSA PRIVATE KEY-----

Что случилось?

+++++++++++++++++++++++++++++++++++++++++

Upd:

Your question has been identified as a possible duplicate of another question. If the answers there do not address your problem, please edit to explain in detail the parts of your question that are unique.

Нет, это не дубликат. У меня есть сертификат, который нужно отправить клиенту. Если я удалю local_cert из stream_context, я не получу сообщение об ошибке на первом шаге при загрузке файла wsdl, но получу сообщение об ошибке от клиентского api.

Решение в Поддерживает ли PHP SoapClient соединения HTTPS было следующим

I have the same trouble on Windows with php 5.6 and it works fine on Linux with php 5.6.

Working in LInux environment indeed solved the issue

Это не решение. Я работаю в Ubuntu 16.04 с php7.0 и пробую php5.6

Как показывает ошибка, файл WSDL не существует по указанному пути, убедитесь, что этот файл существует по указанному пути.

Manoj Singh 31.10.2018 13:45

Если я пытаюсь запустить test_site.com/test?wsdl в браузере, я получаю файл wsdl

user2264941 31.10.2018 13:48

посмотрите это - stackoverflow.com/questions/28109505/… может вам помочь

Manoj Singh 31.10.2018 14:00

Вы можете использовать эту функцию, чтобы узнать, где находятся сертификаты. Мне это не нужно, я установил pem-файл в stream_context.

user2264941 31.10.2018 16:43

Возможный дубликат Поддерживает ли PHP SoapClient соединения HTTPS

ophychius 01.11.2018 08:14

>> У меня такая же проблема в Windows с php 5.6, и он отлично работает в Linux с php 5.6. Зачем дублировать? У меня PHP7.0 на Ubuntu

user2264941 01.11.2018 09:53
0
6
1 617
1

Ответы 1

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

Сертификат .pem должен иметь «ЧАСТНЫЙ КЛЮЧ», а не «ЧАСТНЫЙ КЛЮЧ RSA». Вы можете повторно выдать его из .pfx или .p12 с помощью openssl с помощью следующих команд:

openssl pkcs12 -in *certname.*extension -out cert.pem -clcerts -nokeys
openssl pkcs12 -in *certname.*extension -out key.pem -nocerts -nodes

Учтите, что вам нужно вручную объединить результат в "cert.pem", удалив весь текст, который не находится между тегами:

-----BEGIN CERTIFICATE-----
MIIEvQIBADANB.....GqvF7B/rM=
-----END CERTIFICATE-----

и копирование закрытого ключа в конец файла результата

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANB.....kDIjNMnIzOQ=
-----END PRIVATE KEY-----

Другие вопросы по теме