php - 带有 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”文件中。
我该怎么做呢?
解决方案
最后,我刚刚从 CURL 网站下载了公共 PEM 文件:https ://curl.haxx.se/ca/cacert.pem作为起点。
我验证这工作正常(模无法使用自签名服务器证书),而且确实如此。这验证了“curl.cainfo”需要该文件的路径。
然后我将自己的文件移动到同一个位置,然后繁荣:错误 77。
我通过notepad++比较了这两个文件,它立即抱怨文件的编码不同。哇!
结果是:Windows shell 命令在我的文件开头添加了一个 UTF-16 LE BOM,而 PHP 根本不喜欢它。文章没有提到这一点。
在没有 BOM 的情况下将文件转换为 UTF-8(没有任何更改,因为内容仅包含 ASCII),现在它工作得很好。
谨防!编码!
推荐阅读
- node.js - `npm install` 总是从 package.json 安装所有东西
- .net - 如何在 .NET 中实现正确的存储库模式
- android - 世博会反应原生初始化
- ruby-on-rails - 多目标 has_man 通过:
- node.js - util.inspect - 如果数字为 0,则使字符串变为红色
- javascript - 获取最后修改的页面
- amazon-web-services - 如何访问 Cognito 用户的密码验证程序?
- emacs - 错误的类型参数:stringp, nil - slime 安装
- c# - 无法加载文件或程序集“System.Security.Cryptography.Xml”
- tableau-api - Tableau 背景颜色