Codeigniter路由本地正常但线上服务器失效且报cURL SSL错误求助
问题定位
你提供的Codeigniter路由规则本身没有语法问题,本地正常、服务器失效的现象和该路由配置无关。当前抛出的GuzzleHttp\Exception\RequestException报错,是ForgeAPI/deleteBucket方法内部发起HTTPS请求时触发的SSL证书校验异常,和路由层配置没有关联。
cURL默认会对所有HTTPS请求执行SSL证书合法性校验,是防范中间人攻击的默认安全机制,属于正常逻辑。本地运行正常一般是两种原因:要么你本地开发环境提前配置过关闭cURL SSL校验,要么本地系统根证书库已经信任了对应自签证书,而demo服务器的根证书库没有信任该证书,因此触发校验失败。
解决方案
临时调试方案(仅测试环境使用,禁止在生产环境配置)
在Guzzle客户端初始化时添加参数关闭SSL校验即可:
$client = new \GuzzleHttp\Client([ 'verify' => false, // 其余原有配置保持不变 ]);
如果你的项目里是封装过的Guzzle单例,找到对应初始化位置添加上述配置即可。
生产环境合规方案
二选一即可:
- 替换对应接口域名的自签证书,使用正规CA机构签发的有效SSL证书
- 如果你必须保留自签证书,将自签证书的pem格式文件上传到服务器固定路径,在Guzzle配置中指定该证书路径:
$client = new \GuzzleHttp\Client([ 'verify' => '/服务器上自签证书的绝对路径/self-cert.pem', ]);
你也可以将该自签证书添加到demo服务器的系统根证书信任库,配置后服务器上所有cURL请求都会自动信任该证书,无需单独在Guzzle中配置。
内容的提问来源于stack exchange,提问作者Ranjan Goyal
相关产品推荐
相关产品推荐

