PHP CURL GET HTTPS报错SSL certificate problem: unable to get local issuer certificate

本文详细介绍了如何使用PHP的cURL库进行HTTP和HTTPS请求。对于HTTPS请求,文章提供了两种解决方案:一种是关闭SSL验证,另一种是配置HTTPS证书,通过下载并配置PEM文件来避免SSL证书问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

请求HTTP

使用php curl获取http资源,不会报错。
如下:

<?php
// 创建curl资源
$ch = curl_init(); 
// 设置url
curl_setopt($ch, CURLOPT_URL, "baidu.com"); 
// 将Transfer作为字符串返回
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行并输出
$output = curl_exec($ch); 
// 查看错误
$error = curl_error($ch);
echo $error;
// 释放curl资源
curl_close($ch); 

请求HTTPS

但是如果请求HTTPS的时候,默认会报错:

SSL certificate problem: unable to get local issuer certificate

这是因为HTTPS需要证书认证,如果本地没有装,就会报这个错误,我们可以把这个认证关掉。

<?php
// 创建curl资源
$ch = curl_init(); 
// 设置url
curl_setopt($ch, CURLOPT_URL, "https://github.com/search?q=react"); 
// 将Transfer作为字符串返回
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 关闭SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// 执行并输出
$output = curl_exec($ch); 
// 查看错误
$error = curl_error($ch);
echo $error;
// 释放curl资源
curl_close($ch);  

配置HTTS

另外的一种解决办法,就是配置上HTTPS,找到证书:

http://curl.haxx.se/ca/cacert.pem
下载pem文件。

在PHP配置文件(php.ini)里配置PEM文件目录位置。

curl.cainfo = "path\to\cacert.pem"

参考:http://php.net/manual/zh/function.curl-setopt.php

<think>嗯,我现在遇到了Git Clone时的SSL证书问题,错误提示是“unable to get local issuer certificate”。这个问题让我有点困惑,我需要仔细想想该怎么解决。首先,我得理解这个错误的原因。SSL证书问题通常和Git在克隆仓库时无法验证服务器的SSL证书有关。可能的原因包括系统缺少根证书,或者Git配置不正确,无法找到这些证书。 根据我之前看到的引用[1]和[2],用户提到可以通过设置环境变量或者修改Git配置来禁用SSL验证。例如,设置`GIT_SSL_NO_VERIFY=true`或者运行`git config http.sslVerify false`。不过,这样做虽然能解决问题,但会降低安全性,因为跳过了证书验证。另外,引用[1]还提到尝试下载cacert.pem文件,但在AIX系统上路径可能不同,导致失败。引用[3]则是在初始化Hexo时遇到同样的问题,说明这个问题可能在不同的操作环境下出现。 那有没有更安全的解决方法呢?可能需要正确配置Git使用的证书路径。通常,Git会依赖系统或它自己的证书存储。如果系统缺少根证书,或者Git找不到它们,就会报错。比如,在Linux系统中,证书通常存放在`/etc/ssl/certs`或者类似的位置,而Windows可能使用不同的路径。用户提到的AIX系统可能路径不同,导致下载的证书无法正确应用。 我应该先检查系统的证书存储是否正确安装。比如,是否安装了ca-certificates包?或者是否需要手动下载根证书?根据引用[1]中的建议,尝试下载cacert.pem文件,并指定Git使用这个文件。例如,通过配置`http.sslCAInfo`指向该文件。比如执行`git config --global http.sslCAInfo /path/to/cacert.pem`。这可能是一个更安全的解决方案,而不是直接禁用验证。 另外,可能的问题来源是代理或者网络中间设备干扰了SSL连接,导致证书链不完整。这种情况下,更新系统的根证书可能有效。比如,在Ubuntu上可以运行`sudo update-ca-certificates`,或者在Windows上更新根证书。 总结可能的解决步骤: 1. 临时禁用SSL验证(不推荐长期使用)。 2. 配置Git使用正确的证书文件。 3. 更新系统的CA证书存储。 4. 检查网络环境是否有干扰。 需要逐一尝试这些方法,并找到适合自己系统环境的解决方案。同时,需要注意安全风险,优先选择配置正确证书的方法,而不是直接关闭验证。</think>### Git Clone SSL证书问题的解决方法 #### 1. **临时禁用SSL验证(仅测试用)** ```bash # 设置环境变量临时关闭验证 export GIT_SSL_NO_VERIFY=true git clone https://... # 完成后恢复 unset GIT_SSL_NO_VERIFY ``` **或通过Git配置禁用**: ```bash git config --global http.sslVerify false # 恢复配置 git config --global --unset http.sslVerify ``` *风险提示:此方法绕过证书验证,可能导致中间人攻击*[^1][^2]。 --- #### 2. **配置Git使用指定证书文件** - **下载根证书**(如`cacert.pem`): ```bash curl -L https://curl.se/ca/cacert.pem -o /path/to/cacert.pem ``` - **设置Git使用该证书**: ```bash git config --global http.sslCAInfo /path/to/cacert.pem ``` *适用于证书路径缺失或系统证书库不完整的情况*[^3]。 --- #### 3. **更新系统CA证书库** - **Debian/Ubuntu**: ```bash sudo apt install ca-certificates sudo update-ca-certificates ``` - **Windows**: 通过系统工具更新根证书(如`certmgr.msc`)。 - **AIX系统**: 手动将证书复制到`/var/ssl/cacert.pem`并设置环境变量: ```bash export SSL_CERT_FILE=/var/ssl/cacert.pem ``` --- #### 4. **检查网络环境** 如果使用代理或防火墙,可能需要: - 配置代理的SSL证书信任。 - 检查时间同步(证书有效期依赖系统时间)。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小龙在山东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值