在 Windows 上使用 PHP 发起 HTTPS 请求时,如果出现如下类似错误:
SSL certificate problem: unable to get local issuer certificate
这通常是因为 PHP 无法验证远程服务器的 HTTPS 证书,原因在于 缺少正确的 CA 根证书列表。下面是详细的修复步骤:
cacert.pem
)cacert.pem
),推荐保存到 PHP 安装目录下,例如:php.ini
配置文件php.ini
,一般在 PHP 安装目录下。;curl.cainfo =
;openssl.cafile =
curl.cainfo = "C:\php\extras\ssl\cacert.pem"
openssl.cafile = "C:\php\extras\ssl\cacert.pem"
⚠️ 注意使用 绝对路径,且路径中的反斜杠使用
\
\ 或用双引号包裹。
保存完 php.ini
后,记得重启 PHP 所使用的服务器:
你可以运行以下 PHP 脚本测试:
<?php
$response = file_get_contents("https://www.google.com");
echo $response ? "成功访问 Google!" : "访问失败!";
如果不再报错且能成功返回内容,则说明修复成功!
cacert.pem
放在 PHP 安装目录或明确的位置,并定期更新(证书列表每年更新)。curl.cainfo
主要用于 cURL
,openssl.cafile
主要用于 file_get_contents()
、stream
等。fix_php_ssl.bat
fix_php_ssl.bat
php.ini
修改fix_php_ssl.bat
内容如下:@echo off
setlocal enabledelayedexpansion
echo ================================================
echo PHP HTTPS 证书一键修复工具 - By ChatGPT
echo ================================================
REM 获取 php.ini 路径
set /p PHP_PATH=请输入你的 PHP 安装目录(例如 C:\php):
set INI_PATH=%PHP_PATH%\php.ini
set CACERT_DIR=%PHP_PATH%\extras\ssl
set CACERT_PATH=%CACERT_DIR%\cacert.pem
set CACERT_URL=https://curl.se/ca/cacert.pem
REM 检查 php.ini 是否存在
if not exist "%INI_PATH%" (
echo ❌ 错误:找不到 php.ini 文件:%INI_PATH%
pause
exit /b
)
REM 创建证书目录
if not exist "%CACERT_DIR%" (
mkdir "%CACERT_DIR%"
)
REM 下载 cacert.pem
echo 📥 正在下载 CA 根证书...
powershell -Command "Invoke-WebRequest '%CACERT_URL%' -OutFile '%CACERT_PATH%' -UseBasicParsing"
if exist "%CACERT_PATH%" (
echo ✅ 下载成功:%CACERT_PATH%
) else (
echo ❌ 下载失败,请检查网络连接。
pause
exit /b
)
REM 备份 php.ini
copy "%INI_PATH%" "%INI_PATH%.bak" > nul
echo 🗂 已备份 php.ini 到:%INI_PATH%.bak
REM 修改 php.ini
echo 🛠 正在修改 php.ini...
set FOUND_CURL=0
set FOUND_OPENSSL=0
(
for /f "usebackq delims=" %%a in ("%INI_PATH%") do (
set "line=%%a"
echo !line! | findstr /i "curl.cainfo" >nul && (
echo curl.cainfo="%CACERT_PATH%"
set FOUND_CURL=1
) || echo !line! | findstr /i "openssl.cafile" >nul && (
echo openssl.cafile="%CACERT_PATH%"
set FOUND_OPENSSL=1
) || echo !line!
)
if !FOUND_CURL! == 0 echo curl.cainfo="%CACERT_PATH%"
if !FOUND_OPENSSL! == 0 echo openssl.cafile="%CACERT_PATH%"
) > "%INI_PATH%.tmp"
move /y "%INI_PATH%.tmp" "%INI_PATH%" >nul
echo ✅ 修改完成!
echo.
echo 🎉 已成功配置 CA 根证书!
echo 💡 请记得重启 Web 服务(如 Apache、Nginx 或 PHP-FPM)
pause
C:\php
),它会自动识别 php.ini
,下载证书并写入配置。php.ini
为 php.ini.bak
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有