繁体   English   中英

服务器续订证书后,与WSDL服务的PHP安全连接断开

[英]PHP secure connection with WSDL service breaks after server renewed certificate

新证书是“ Symantec Class 3 EV SSL CA-G3”。 客户有CentOS。 无法控制服务器,它是第三方。 在Firefox和Chrome中加载WDSL https地址时,两个浏览器均显示“安全连接”,没有问题。

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:无法验证Experian URL的第一个证书

要解决该问题,请创建一个cafile.pem并连接所需的Symantec证书(主要中间证书和根证书),如上面可能的重复问题链接所示(请参阅spuder的答案)。

要创建的cafile.pemspuder所示

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM