gpt4 book ai didi

php - 在 OSX 上读取 p12 证书时写入权限错误 (OSStatus -61)

转载 作者:可可西里 更新时间:2023-10-31 23:31:07 38 4
gpt4 key购买 nike

我正在尝试在 OSX 10.9 上通过 cURL 加载文件以下命令从我的用户帐户完成时工作正常,但通过 PHP(用户 _www)完成时失败

 curl https://test.test.com:8443 -sslv3 --cert /Users/[my account]/Sites/sandbox/certificate.p12:password --cert-type P12

我得到的错误是:

* SSL: Can't load the certificate "/Users/[my account]/Sites/sandbox/certificate.p12" and its private key: OSStatus -61

这是一个Write permissions error; Not a publisher , 但 _www 对该文件夹具有读写权限。

当使用证书的通用名称(我手动添加到我的系统钥匙串(keychain)中)时,我自己的帐户和 _www 的调用都正常

curl https://test.test.com:8443 -sslv3 --cert [the common name]

我想让它与 p12 文件一起工作,这样我就可以在生产服务器上使用与在我的开发机器上使用的代码相同的代码。使用普通的 php cURL 库不是一个选项,因为它还不支持 --cert 参数(它似乎使用旧的 --cafile,这不是OSX 10.9 支持)

最佳答案

终于想出了解决办法:-)

首先,您需要使用 OpenSSL(默认使用安全传输)和使用此 curl(默认使用系统 curl)的 PHP 编译您自己的 curl。

通过 Homebrew 编译安装:

brew install curl --with-openssl
brew install php56 --with-homebrew-curl

然后像在 Linux 中一样使用 PEM 格式证书发送 curl 请求(P12 格式仅由使用 Secure Transport 编译的 OS X curl 支持)。

例如使用HTTPful发送客户端认证请求:

Request::get('https://127.0.0.1:12345/ping')->authenticateWithCert(
'client-auth.crt',
'client-auth.key'
);

关于-61错误,我猜是因为Apache中的PHP(在_www下运行)没有权限访问keychain。 Secure Transport 将首先将 P12 证书导入登录钥匙串(keychain)(这会导致此错误),然后从中签署请求(这会提示并请求许可)。

我尝试在我的帐户下运行 Apache,但仍然遇到这个问题。可能与不同的环境变量有关。

关于php - 在 OSX 上读取 p12 证书时写入权限错误 (OSStatus -61),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22305600/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com