Безопасное соединение PHP с сеансами WSDL прерывается после обновления сертификата сервера

Новый сертификат «Symantec Class 3 EV SSL CA – G3». Клиент имеет CentOS. Контроль над сервером отсутствует, он сторонний. Когда адрес https WDSL загружается в Firefox и Chrome, оба браузера показывают «Безопасное соединение», без проблем.

Адрес WSDL: https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL

Тестовый код:

$success = false; $attempts = 0; while (($success === false) && ($attempts < 10)) { $attempts ++; echo 'Attempt ' . $attempts . '<br>'; try { $wsdl = 'https://palena.sii.cl/DTEWS/CrSeed.jws?WSDL'; $entity_loader_status_old = libxml_disable_entity_loader(false); $SoapClient = new SoapClient($wsdl); $seed = $SoapClient -> getSeed(); libxml_disable_entity_loader($entity_loader_status_old); $success = true; } catch (Exception $Exception) { echo $Exception -> getMessage() . '<br>'; } } if ($success === true) { echo 'SUCCESS'; } else { echo 'ERROR'; } 

Соединение по умолчанию безопасно, потому что версия PHP – 5.6.22 (более 5.5.x).

Возможный дубликат: OpenSSL: невозможно проверить первый сертификат для URL-адреса Experian

Чтобы решить, создайте cafile.pem и cafile.pem требуемые сертификаты Symantec (первичный промежуточный и корневой), как показано в возможной дублированной ссылке вопроса выше (см. Ответ спудера ).

cafile.pem для создания, как указано в spuder :

 -----BEGIN CERTIFICATE----- (Your Primary SSL certificate: your_domain_name.crt) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (Your Intermediate certificate: DigiCertCA.crt) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- (Your Root certificate: TrustedRoot.crt) -----END CERTIFICATE----- 

Затем в PHP используйте следующие $options для создания объекта SoapClient :

 $options = [ 'stream_context' => stream_context_create([ 'ssl' => [ 'cafile' => __DIR__ . '/cafile.pem', ], ]), ]; $SoapClient = new SoapClient($wsdl, $options);