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

本地使用PHP的cURL调用Java接口时,遇到HTTPS报错:SSL certificate problem: unable to get local issuer certificate。通过curl_getinfo和curl_error进行调试。解决方案包括禁用SSL验证或下载根证书并配置到php.ini中。

起因:本地调用java接口返回无数据,但测试环境却是有数据的。

调试过程如下:

1,curl_getinfo — 获取一个cURL连接资源句柄的信息。

Array
(
    [url] => https://grapserver.linkstars.com/goods/getSearch
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1    //重点  远程获取文档的时间,如果无法获取,则返回值为“-1”
    [ssl_verify_result] => 20
    [redirect_count] => 0
    [total_time] => 0.097583
    [namelookup_time] => 0.000464
    [connect_time] => 0.044156
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 62.234.91.232
    [certinfo] => Array
        (
        )

    [primary_port] => 443
    [local_ip] => 10.254.30.29
    [local_port] => 61604
    [http_version] => 0
    [protocol] => 2
    [ssl_verifyresult] => 0
    [scheme] => HTTPS
    [appconnect_time_us] => 0
    [connect_time_us] => 44156
    [namelookup_time_us] => 464
    [pretransfer_time_us] => 0
    [redirect_time_us] => 0
    [starttransfer_time_us] => 0
    [total_time_us] => 97583
)

 

 

2,curl_error — 返回当前会话最后一次错误的字符串

SSL certificate problem: unable to get local issuer certificate

解决方法1

如果请求HTTPS的时候,默认会上述报错:

众所周知HTTPS需要证书认证,如果本地没有装,就会报这个错误,可以把ssl认证选项在curl发送请求时关掉。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'X-AjaxPro-Method:ShowList',
    'Content-Type: application/json; charset=utf-8',
    'Content-Length: ' . strlen($data_string))
);
// 关闭SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if ($data_string) {
    // 设置请求方式为post
    curl_setopt($ch, CURLOPT_POST, 1);
    // post的变量
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);     
}else{
    // 设置请求方式为post
    curl_setopt($ch, CURLOPT_POST, 0);
}
$data = curl_exec($ch);
$info = curl_getinfo($ch);
print_r($info);
curl_close($ch);

解决方法2

从curl官方网站,下载根证书:cacert.pem ,然后修改php.ini中加入该证书,并重启web服务。

#在php.ini中加入 [SSL] 
curl.cainfo ="D:\phpstudy_pro\Extensions\php\php7.3.4nts\extras\ssl\cacert.pem"
openssl.cafile = "${curl.cainfo}"

 

当遇到 `git clone` 报错 **`unable to access: SSL certificate problem: unable to get local issuer certificate`** 时,通常是因为 Git 无法验证远程服务器(如 GitHub、GitLab)的 SSL 证书。以下是解决方法: --- ### **1. 临时禁用 SSL 验证(不推荐,仅测试用)** ```bash git config --global http.sslVerify false ``` **注意**:这会关闭 SSL 证书验证,存在安全风险,仅用于临时测试。 --- ### **2. 手动配置 Git 信任证书(推荐)** #### **Windows(Git Bash)** 1. 下载根证书(如 `cacert.pem`): - 从 [curl.se/docs/caextract.html](https://curl.se/docs/caextract.html) 获取。 2. 保存到 `C:\Users\<你的用户名>\cacert.pem`。 3. 配置 Git 使用该证书: ```bash git config --global http.sslCAInfo "C:/Users/<你的用户名>/cacert.pem" ``` #### **Linux/macOS** 1. 安装 CA 证书包: ```bash # Ubuntu/Debian sudo apt-get install ca-certificates # CentOS/RHEL sudo yum install ca-certificates # macOS (通常已内置) ``` 2. 配置 Git 使用系统证书: ```bash git config --global http.sslCAInfo /etc/ssl/certs/ca-certificates.crt ``` --- ### **3. 更新系统 CA 证书存储** - **Windows**:运行 `certmgr.msc`,确保受信任的根证书颁发机构包含最新证书。 - **Linux/macOS**:更新证书包: ```bash # Ubuntu/Debian sudo update-ca-certificates # macOS (使用 Homebrew) brew install openssl ``` --- ### **4. 检查网络代理问题** 如果使用代理,确保其证书可信: ```bash # 查看当前代理设置 env | grep -i proxy # 临时取消代理 unset HTTPS_PROXY HTTP_PROXY ``` --- ### **5. 其他可能原因** - **系统时间错误**:确保日期和时间正确(SSL 证书依赖时间验证)。 - **防火墙/杀毒软件拦截**:临时关闭后重试。 --- ### **验证是否解决** 重新运行 `git clone`,例如: ```bash git clone https://github.com/username/repo.git ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值