首页 > 解决方案 > 带有 cURL 错误 77 的 Windows PHP:设置证书验证位置时出错

问题描述

我正在通过命令行在 Windows 服务器上使用 PHP 7.4(考虑执行 IDE PHPUnit 测试 - 不涉及 HTTP 服务器),并且我试图通过 HTTPS 通过 CURL 扩展(包装在 Guzzle 中)访问远程服务器。

CURL/Guzzle 以“cURL 错误 77:设置证书验证位置错误”之类的错误响应。

我需要将私有服务器 CA 证书添加到我的证书存储中才能正常工作,但它没有。我通过https://neurotechnics.com/blog/ssl-ca-bundles-for-curl-and-php/导出了 Windows Cert 存储,基本上导出它,然后通过 shell 命令对其进行转换,但仍然没有运气将路径或文件添加到“curl.cainfo”下的“php.ini”文件中。

我该怎么做呢?

标签: phpwindowscurlguzzleself-signed-certificate

解决方案


最后,我刚刚从 CURL 网站下载了公共 PEM 文件:https ://curl.haxx.se/ca/cacert.pem作为起点。

我验证这工作正常(模无法使用自签名服务器证书),而且确实如此。这验证了“curl.cainfo”需要该文件的路径。

然后我将自己的文件移动到同一个位置,然后繁荣:错误 77。

我通过notepad++比较了这两个文件,它立即抱怨文件的编码不同。哇!

结果是:Windows shell 命令在我的文件开头添加了一个 UTF-16 LE BOM,而 PHP 根本不喜欢它。文章没有提到这一点。

在没有 BOM 的情况下将文件转换为 UTF-8(没有任何更改,因为内容仅包含 ASCII),现在它工作得很好。

谨防!编码!


推荐阅读