Rootop 服务器运维与web架构

curl访问提示SSL certificate problem: unable to get local issuer certificate

当在php代码中请求指定接口时,提示错误

SSL certificate problem: unable to get local issuer certificate, on POST https://api.x.com/xx/xx

在系统中通过curl命令访问也是这个错误。

开始以为是本地的ca-certificates包过旧,可信根证书列表失效导致,但是更新以后还是如此。
排查发现这个问题是由于对方的ssl证书中没有包含中间证书导致的,本地系统只包含根,不带中间证书,导致验证失败。

浏览器验证ssl证书的可信性通常由 根证书-中间证书-服务器证书 组成

在证书链中,通常分为三级结构,根证书、中间证书、服务器证书(域名证书)。
在正常的证书链顺序中服务器证书处于最低端,该证书包含了服务器域名,服务器公钥和签名值等。
在其上一级则是中间证书,也就是由权威CA机构授权的二级机构,用来签发服务器证书。
最上级就是根证书,也就是CA机构,对服务器身份进行校验时,需要验证整个证书链。
由于浏览器中集成了权威CA机构的根证书,因此主要是校验中间证书和服务器证书的签名值是否正确,从而构成一条信任链。

/etc/pki/ca-trust/source/anchors/ 目录在 CentOS 系统中用于存储用户添加的信任锚点(trust anchors)证书(根证书或中间证书)。
当需要让系统信任一个额外的证书颁发机构(CA)时,可以将该 CA 的证书复制到这个目录。
然后,运行 update-ca-trust 命令来更新系统信任的证书。
这样,系统上的应用程序和服务就能够信任由这些额外 CA 签发的证书了。

中间证书一般在颁发ssl证书时会合并在一起,但不排除某些需要自己合并的场景。

# 安装中间证书

存放路径:/etc/pki/ca-trust/source/anchors/
生效:update-ca-trust

# 证书链检查网站
https://uutool.cn/ssl-check/

[root@ip-172-31-10-235 certs]# rpm -ql ca-certificates-2023.2.64-1.amzn2.0.1.noarch
/etc/pki/ca-trust
略
/etc/ssl/certs
/usr/bin/ca-legacy
/usr/bin/update-ca-trust
略
ca-certificates这个rpm包提供了update-ca-trust命令及证书路径,系统内的根证书就是由此包提供。

参考:https://www.cnblogs.com/sslwork/p/5986985.html

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5443.html

作者:Venus

服务器运维与性能优化

评论已关闭。