You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP控制台无法连接WSDL:Yii调用SOAP接口SSL证书验证失败

解决Yii框架调用SRI WebService时的SSL证书验证失败问题

问题现象

调用SRI(厄瓜多尔税务总局)的离线发票接收WebService时,持续出现以下错误:

Handler捕获到错误2:'SoapClient::SoapClient(): SSL操作失败,错误代码1。OpenSSL错误信息:error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed'
Handler捕获到错误2:'SoapClient::SoapClient(): Failed to enable crypto'
Handler捕获到错误2:'SoapClient::SoapClient(https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl): 无法打开流:操作失败'
Handler捕获到错误2:'SoapClient::SoapClient(): I/O警告:无法加载外部实体"https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl"'
Error en la Conexión al SRI (Validación), no hay servicio disponible

已确认PHP 7.4/8.1/8.2版本均存在该问题,且openssl、soap模块已启用,WebService本身处于在线状态。

解决方案

1. 配置SRI官方根证书(生产环境推荐)

SRI的SSL证书需要对应的根证书才能通过验证,步骤如下:

  • 从SRI官方渠道获取根证书,保存到项目目录(例如@app/config/sri_root_cert.pem)
  • 创建SoapClient时,通过stream_context指定CA证书路径:
// Yii框架中创建SoapClient的示例代码
$contextOptions = [
    'ssl' => [
        'cafile' => Yii::getAlias('@app/config/sri_root_cert.pem'),
        'verify_peer' => true,
        'verify_peer_name' => true,
    ]
];
$streamContext = stream_context_create($contextOptions);

try {
    $soapClient = new SoapClient(
        'https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl',
        [
            'stream_context' => $streamContext,
            'cache_wsdl' => WSDL_CACHE_NONE, // 可选,禁用WSDL缓存避免旧文件影响
        ]
    );
} catch (\SoapFault $e) {
    // 处理连接错误
    Yii::error('SRI WebService连接失败:' . $e->getMessage());
}

2. 临时跳过证书验证(仅测试环境使用)

如果是测试环境快速排查问题,可以临时关闭证书验证,但生产环境绝对禁止使用,存在中间人攻击风险:

$contextOptions = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true,
    ]
];
$streamContext = stream_context_create($contextOptions);

$soapClient = new SoapClient(
    'https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl',
    ['stream_context' => $streamContext]
);

3. 更新服务器系统CA证书库

部分服务器的系统CA证书库过时,导致无法识别SRI的新证书,可通过以下命令更新:

  • Debian/Ubuntu系统:
sudo apt-get update && sudo apt-get install ca-certificates && sudo update-ca-certificates
  • CentOS/RHEL系统:
sudo yum install ca-certificates && sudo update-ca-trust

注意事项

  • 生产环境必须使用根证书验证的方式,禁止跳过证书检查
  • 确保获取的SRI根证书为官方发布,避免使用第三方来源的证书引发安全问题
  • 若使用Yii2框架,可将证书路径配置到params.php中,便于统一管理

内容的提问来源于stack exchange,提问作者Diego Galarza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:52:54