DocuSign接口报unable to get local issuer certificate错误排查
问题根因
这个报错和你自己的主域名、子域名有没有安装SSL证书完全无关。
报错本质是:新子域名对应的服务端PHP/CURL运行环境,没有配置可用的可信根CA证书库,导致你作为客户端请求DocuSign的OAuth接口时,CURL无法验证DocuSign返回的SSL证书的签发链合法性,直接中断了请求。
你主域名运行正常,是因为主域名对应的PHP环境已经提前配置好了CA证书路径;新子域名的运行环境(要么是同服务器上独立的PHP版本池,要么是全新的服务器实例)缺这个配置,才会抛错。你自己站点的SSL证书是给访问你站点的用户做校验用的,和你主动向外发起API请求时校验对方证书的流程完全没关系,不用在自己站点的证书上浪费时间排查。
修复配置步骤
按优先级从高到低操作即可:
- 复用已有正常配置
先找到主域名对应PHP版本的php.ini文件,搜索curl.cainfo和openssl.cafile两个配置项,复制这两个项的配置值。再打开新子域名对应PHP版本的php.ini,把这两个配置项填成一样的值,确认配置里指向的cacert.pem文件在新环境的对应路径真实存在,重启PHP-FPM/Apache的PHP进程即可恢复。 - 补全缺失的CA证书文件
如果新环境上根本没有对应的cacert.pem文件,把正规的CA根证书集合文件放到服务器非Web访问目录(比如/etc/ssl/certs/cacert.pem),再把上述两个配置项的值设为该文件的绝对路径,重启PHP进程就行。 - 排查权限和路径限制
如果配置完还是报错,检查新子域名的PHP是否开了open_basedir限制,要确保cacert.pem所在的目录在open_basedir的允许访问列表里,否则PHP读不到证书文件一样会抛同类错误。 - 临时调试方案(严禁生产环境使用)
如果只是临时验证代码逻辑,可以在初始化DocuSign客户端时临时关闭SSL校验:
这个操作会跳过服务端证书合法性校验,存在中间人攻击风险,调试完必须删掉,生产环境绝对不能留。$client->getConfig()->setSSLVerification(false);
避坑提醒:不要把你自己站点的SSL证书、私钥填到
curl.cainfo/openssl.cafile配置项里,这两个配置要求的是存储了所有可信根CA证书的集合文件,不是单个站点的业务证书。
内容的提问来源于stack exchange,提问作者Bill in Kansas City
相关产品推荐
相关产品推荐

