服务器更新证书后 PHP 与 WSDL 服务的安全连接中断

标签 php security centos wsdl tls1.2

新证书是“Symantec Class 3 EV SSL CA - G3”。客户端有 CentOS。没有对服务器的控制,它是第三方。在火狐和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: unable to verify the first certificate for Experian URL

解决创建一个cafile.pem并连接所需的赛门铁克证书(主要中间证书和根证书),如上面可能的重复问题链接所示(请参阅 spuder 的答案)。
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);

关于服务器更新证书后 PHP 与 WSDL 服务的安全连接中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41175867/

相关文章:

security - 为什么人们公开发布他们的验证码?验证码 : somerandomword

c# - 如何在 .net 中屏蔽信用卡号的前 6 位和后 4 位

linux - CentOS yum -y install 和 yum install 有什么区别

linux - 终端:将文件内容(电子邮件)转换为MD5

phpmyadmin - YUM 未在 CentOS 6 上从 EPEL 安装某些软件包

php - Laravel - 将关系添加到工厂创建的模型

java - 如何翻译不同语言的城市名称

PHP初学者安全恐惧

php - 如何通过php从mysql中删除一行

php - 如何在 Laravel 中自定义错误消息?