2016-12-16 9 views
0

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

Адрес 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).

+0

возможно серта установка была недостающей где-то. похоже, что соединение с защитой отключено. – weirdo

+0

@weirdo действительно защищенное соединение терпит неудачу, если я отключу его безопасность. Мне нужно безопасное соединение. Если установка сертификата отсутствовала, то почему браузер показывает «Безопасное соединение» при загрузке WSDL в браузере? – mikl

+1

Обычно SOAP использует cURL для установления соединения. По умолчанию, cURL использует строгий режим и будет терпеть неудачу, если возникнет проблема с безопасным подключением. если у вас есть доступ к серверу, попробуйте этот 'curl https: //palena.sii.cl/DTEWS/CrSeed.jws? WSDL' и посмотрите вывод – weirdo

ответ

0

Возможный дубликат: OpenSSL: unable to verify the first certificate for Experian URL

Для решения создать cafile.pem и сцепить необходимые сертификаты Symantec (первичные промежуточные и корневые), как показано на возможную связь дубликата вопроса выше (см spuder «s ответ).

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); 
+0

Объединение корневого сертификата CA только добавляет дополнительные служебные данные. – Narf

+0

Решение, которое я опубликовал, является обходным путем, я действительно не контролирую конфигурацию сервера. Я предпочитаю некоторые накладные расходы, иначе мне нужно будет отключить проверку сверстников или вообще не использовать эту услугу. Что еще я мог сделать, если у меня нет возможности исправить его на стороне сервера? – mikl

+1

Я думал, что вы говорите о сервере и, может быть, комментируете поспешно, но, вероятно, все еще исправляете оба способа, поскольку как клиент, так и сервер, как предполагается, уже имеют корень. Накладные расходы на стороне клиента не так важны, хотя, пока это работает для вас. Я все равно буду уведомлять администраторов сайта. – Narf