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
相关产品推荐
相关产品推荐

