记一次curl请求https证书过期问题
事情源于一次项目调用第三方接口,协议是https。在国庆前都是好好的,突然假期最后一天领导说访问不了网页了,忙去查看下日志,发现报证书过期,第一反应是接口提供方的域名证书过期了,但是后来本地调用又发现正常,后经过以下排查发现并解决了问题
问题
项目是用php开发的,由于php的guzzle工具是依赖于服务器的curl,所以curl模拟一波,果然重现了问题
请求
curl -H "Content-Type:application/json" -X POST --data '{"param1":1}' https://openapi.xxx.cn/api/getData
报错
curl: (60) SSL certificate problem: certificate has expired
解决方案
很明显,提示证书过期时,由于已经本地测试过几乎可以排除对方证书过期的问题,那么很明显是服务器环境的问题
方案一
关闭对证书的验证【-k】,虽然马上就不报错了,但是这种方式只是应急的,生产环境并不可取
curl -H "Content-Type:application/json" -X POST --data '{"param1":1}' https://openapi.xxx.cn/api/getData -k
{"data":null,"resultCode":-102,"resultMsg":"该请求已过期"}
方案二
基本可以确定是服务器本地的证书过旧,需要下载最新的【http://curl.haxx.se/ca/cacert.pem 】,以下提供本地mac环境和服务器centos环境下的解决过程
mac
curl-config --ca //尝试获取证书位置,但是我这边返回了空,问题不大,继续curl -v看下具体信息
curl http://xxx -v //查看报错原因,得知mac下读取的证书文件位置是在[/etc/ssl/cert.pem ]
ls -l /etc/ssl/cert.pem
-rw-r--r-- 1 /etc/ssl/cert.pem //这里直接是个文件,权限是644
cp /etc/ssl/cert.pem /etc/ssl/cert.bak.pem //备份原文件
curl -o ./cacert.pem "http://curl.haxx.se/ca/cacert.pem" -L -v //下载最新的证书。-L是为了跟踪重定向,-v是为了查看具体信息
cp ./cacert.pem /etc/ssl/cert.pem //替换原文件,到此完成
centos
curl-config --ca //尝试获取证书位置,得知centos下读取的证书文件位置是在[/etc/pki/tls/certs/ca-bundle.crt]
ll /etc/pki/tls/certs/ca-bundle.crt
lrwxrwxrwx 1 root root /etc/pki/tls/certs/ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem //这里是个软连接,权限是777
mv /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-bundle.bak.crt //备份原文件
curl -o ./cacert.pem "http://curl.haxx.se/ca/cacert.pem" -L -v //下载最新的证书。-L是为了跟踪重定向,-v是为了查看具体信息
cp ~/cacert.pem /etc/pki/ca-trust/extracted/pem/20211008-ca-bundle.pem //先存放到这个目录下
ln -s /etc/pki/ca-trust/extracted/pem/20211008-ca-bundle.pem /etc/pki/tls/certs/ca-bundle.crt //和原文件一样,创建软连接,到此完成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!