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

双向SSL/TLS配置咨询:PHP SoapClient调用Web服务握手失败

双向SSL/TLS认证配置与SoapClient握手问题解决

1. Ubuntu服务器安装合作方CA证书步骤

  • 把合作方提供的CA证书(比如命名为partner-ca.crt)复制到系统证书目录:
    sudo cp partner-ca.crt /usr/local/share/ca-certificates/
    
  • 更新系统信任证书池:
    sudo update-ca-certificates
    
    执行后会显示更新的证书数量,确认有新增条目即为成功。如果证书是.pem格式无需修改后缀,命令会自动识别。

2. 双向认证配置流程正确性说明

核心逻辑是对的,但细节需注意:

  • 你需要提供给合作方的是你的公钥证书(.crt文件),他们需要将该证书导入自身服务器的信任列表,这样其服务才会认可你的请求身份。
  • 你发起请求时,必须同时提供你的公钥证书和对应私钥,不能仅提供私钥。最简便的方式是将两者合并为一个PEM格式文件,供SoapClient调用。

3. SoapClient "ssl handshake failed" 错误排查与解决

你的代码参数配置存在问题,结合双向认证要求,按以下步骤处理:

代码修正

SoapClient的local_cert参数需指向包含你的公钥证书和私钥的合并PEM文件,若私钥设置了密码,需额外添加passphrase参数:

  • 合并crt证书与私钥到一个文件:
    cat your-cert.crt your-private-key.key > combined.pem
    
  • 修改后的代码示例:
    $client = new SoapClient($wsdl, [
        'local_cert' => '/绝对路径/combined.pem',
        'passphrase' => '你的私钥密码', // 私钥无密码可删除此行
        'trace' => true,
        'verify_peer' => true, // 必须开启,确保验证服务器证书合法性
        'cafile' => '/usr/local/share/ca-certificates/partner-ca.crt' // 直接指定合作方CA,避免系统信任池未生效问题
    ]);
    

额外排查步骤

  • 检查证书有效期:确认你的证书与合作方CA证书均未过期
  • 验证证书链:用openssl确认你的证书由合作方CA签发:
    openssl verify -CAfile partner-ca.crt your-cert.crt
    
    输出your-cert.crt: OK则表示证书链有效
  • 模拟SSL握手:用openssl命令测试连接,定位具体错误:
    openssl s_client -connect 合作方服务地址:443 -cert your-cert.crt -key your-private-key.key -CAfile partner-ca.crt
    
    查看输出中的错误提示(如证书不匹配、协议版本不兼容等)
  • 检查PHP环境:确保openssl扩展已启用,allow_url_fopen参数处于开启状态(若需远程加载WSDL)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:23:34