You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xrpl-php运行示例遇GuzzleHttp SSL证书错误的合规解决咨询

XRPL-PHP运行示例时SSL证书错误的解决方案

问题描述

我已在本地成功安装xrpl-php仓库,但运行示例文件时出现如下错误:

PHP Fatal error:  Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://faucet.altnet.rippletest.net/accounts in C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php:276
Stack trace:
#0 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(205): GuzzleHttp\Handler\CurlFactory::createRejection()
#1 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php(157): GuzzleHttp\Handler\CurlFactory::finishError()
#2 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Handler\CurlHandler.php(47): GuzzleHttp\Handler\CurlFactory::finish()
#3 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\PrepareBodyMiddleware.php(64): GuzzleHttp\Handler\CurlHandler->__invoke()
#4 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Middleware.php(31): GuzzleHttp\PrepareBodyMiddleware->__invoke()
#5 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\RedirectMiddleware.php(71): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#6 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Middleware.php(66): GuzzleHttp\RedirectMiddleware->__invoke()
#7 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\HandlerStack.php(75): GuzzleHttp\Middleware::GuzzleHttp\{closure}()
#8 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Client.php(333): GuzzleHttp\HandlerStack->__invoke()
#9 C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Client.php(106): GuzzleHttp\Client->transfer()
#10 C:\xampp\htdocs\xrp\vendor\hardcastle\xrpl_php\src\Client\JsonRpcClient.php(98): GuzzleHttp\Client->sendAsync()
#11 C:\xampp\htdocs\xrp\vendor\hardcastle\xrpl_php\src\Sugar\fundWallet.php(80): Hardcastle\XRPL_PHP\Client\JsonRpcClient->rawRequest()
#12 C:\xampp\htdocs\xrp\vendor\hardcastle\xrpl_php\src\Client\JsonRpcClient.php(314): Hardcastle\XRPL_PHP\Sugar\fundWallet()
#13 C:\xampp\htdocs\xrp\vendor\hardcastle\xrpl_php\examples\quickstart\1.get-accounts-send-xrp.php(22): Hardcastle\XRPL_PHP\Client\JsonRpcClient->fundWallet()
#14 {main}
  thrown in C:\xampp\htdocs\xrp\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 276

我尝试过以下方案:

  • 确认Guzzle已安装,无效
  • 下载cacert.pem到C:\xampp\php\extras\ssl\路径,修改php.ini的curl.cainfo和openssl.cafile指向该文件,重启Apache后问题依旧
  • 修改Guzzle的CurlFactory.php文件,设置CURLOPT_SSL_VERIFYPEER为false,虽有效但不符合编码规范

问题:这种禁用SSL验证的做法是否合规?还有哪些正确的解决方法?

环境信息

  • PHP 8.3.10
  • Composer 2.7.8(2024-08-22 15:28:36)
  • hardcastle/xrpl_php ^0.9.4
  • Visual Studio 1.94.2
  • ApacheFriends XAMPP 8.2.12
  • Windows 10 Pro 64位

解决方案

1. 禁用SSL验证的合规性

绝对不合规。这种做法会完全取消SSL证书校验,让请求暴露在中间人攻击风险下,对于涉及加密货币的操作来说,数据安全是核心,无论测试还是生产环境都坚决不能使用。

2. 正确解决方法

(1)确认php.ini配置是否生效

  • 执行php -i命令,查看curl.cainfo和openssl.cafile的实际值,确认是否与设置的路径一致
  • 注意:XAMPP的Apache环境和CLI环境可能使用不同的php.ini文件,需检查对应运行环境的配置文件
  • 确保cacert.pem是最新版本的证书文件

(2)为Guzzle单独指定CA证书

无需修改第三方库文件,初始化xrpl-php客户端时手动传入Guzzle配置,指定CA证书路径:

$client = new Hardcastle\XRPL_PHP\Client\JsonRpcClient(
    'https://faucet.altnet.rippletest.net',
    [
        'verify' => 'C:\xampp\php\extras\ssl\cacert.pem'
    ]
);

该配置仅对当前xrpl客户端生效,不影响其他Guzzle请求。

(3)导入CA证书到系统信任存储

  • 右键点击cacert.pem文件,选择「安装证书」
  • 选择「本地计算机」,点击下一步
  • 选择「将所有证书放入下列存储」,点击「浏览」并选择「受信任的根证书颁发机构」
  • 完成导入后重启Apache和PHP服务

(4)检查XAMPP Apache配置

确认Apache的SSL模块已启用,且httpd.conf、httpd-ssl.conf中没有覆盖PHP SSL设置的冲突配置。


内容的提问来源于stack exchange,提问作者soma56

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:44:58