最近一个星期在跟一个金融公司技术对接。对方系统使用ip白名单和ssl证书认证,请求端需要安装证书来达到双向验证,来保障系统API接口安全。
我们公司的目前线上三台机器A/B/C用作负载均衡,如果要正常访问他们系统,按照流程需要把这三台机器的公网ip添加到对方公司的api访问白名单中,然后我按照他们的方式将证书安装在我们三台服务器中。然后部署到线上进行测试发现,我三台服务器是用php curl扩展发起https请求的,只有C服务器能够正常访问对方公司接口,获取到正确的数据,其余两台只返回false,试了几次都一样的结果:只有C服务器正常返回,AB返回false
三台服务器发起请求的代码一样,为什么会导致不一样的结果呢
一开始想到的是,对方的白名单没把AB服务器ip添加好,然后就向对方再次确认ip白名单是否真的已经添加好了。对方再次确实是已经添加好了。那如果除了ip白名单,还有什么原因会导致这样的结果产生呢?
只能打印更加详细日志来分析了,我们使用curl_error和curl_errno来获取错误信息。
从日志上可以看出,not suported file type 'key' for certiflcate ,原来是curl不支持key格式的证书。所以将证书类型改为‘pem’格式即可