如何解决使用ThinkPHP6和elasticsearch-php客户端连接Elasticsearch 8时的cURL error 77问题?

如何解决使用ThinkPHP6和elasticsearch-php客户端连接Elasticsearch 8时的cURL error 77问题?

Thinkphp6框架结合elasticsearch-php客户端连接Elasticsearch 8时,ssl证书配置错误可能导致cURL Error 77。本文分析此问题并提供解决方案。

问题重现:

使用以下代码连接Elasticsearch 8时,出现cURL error 77错误:

$client = ClientBuilder::create()     ->setHosts(['https://192.17.169.72:9200'])     ->setBasicAuthentication('elastic', 'password copied during elasticsearch start')     ->setCaBundle('/xx/http.p12')     ->build();

错误信息类似于:

立即学习PHP免费学习笔记(深入)”;

cURL error 77 (see [https://curl.haxx.se/libcurl/...](https://link.segmentfault.com/?enc=rv1VLeKAXPLUNrp4daNAwg%3D%3D.fsUIGT9%2FWnWf8meSTQawew%2BreqNQogQnyve9RM4stjYRvWggaPQ2GgfrxnrmqPnyc2D1ma%2BlNbI0nKSskXnRPw%3D%3D)) for [https://elastic:376_7786sX0E-...](https://link.segmentfault.com/?enc=SAA%2B3TBoCHMDll4Qik%2BFwA%3D%3D.mMavfshEDe2qW07hHkbqar18P1i7dgqlUS7%2BNT4JqHrcGADfUgq9pRv0Wpls0cUXi8VNxMh5ozi1H2%2BfF2hXfyy4ErJUj73YjIp9gHFNTy4%3D)

解决方案:

cURL error 77通常与SSL证书验证失败有关。解决方法如下:

  1. 验证CA证书文件路径: 仔细检查/xx/http.p12路径是否正确,且文件是否存在。

  2. 确认CA证书文件格式: 确保/xx/http.p12文件为有效的PKCS#12格式。如果不是,需要进行格式转换。

  3. 检查证书信任链: 验证CA证书是否包含完整的证书链,确保Elasticsearch服务器的证书在该链中。不完整的链会导致验证失败。

  4. 临时禁用证书验证 (仅用于调试): 为了排除其他问题,可以临时禁用证书验证,但这不适用于生产环境。修改代码如下:

$client = ClientBuilder::create()     ->setHosts(['https://192.17.169.72:9200'])     ->setBasicAuthentication('elastic', 'password copied during elasticsearch start')     ->setCaBundle('/xx/http.p12')     ->setSslVerification(false) // 仅用于调试     ->build();

如果禁用证书验证后连接成功,则问题在于证书配置。 务必在生产环境中启用证书验证,确保连接安全。

通过仔细检查以上几点,并确保CA证书配置正确,即可解决cURL error 77,成功连接Elasticsearch 8。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享