出现此类问题, 表明服务器的证书不在执行程序的服务器的信任证书列表里, 导致证书验证出错, 因此方案有两种:
一. 修复证书信任列表载入
此种方法通常没啥效果, 但是安全性没有损失
方案有:
- 更新证书
sudo update-ca-certificates
二. 代码中忽略校验
此种方法非常有效, 但是可能会受到中间人攻击, 这点需要注意, 需要忽略两种常用校验:
- 忽略流内容中的校验
<?php stream_context_set_default( [ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false, ], ]);
- 忽略CURL请求中的校验
<?php curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);