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

时间:2014-03-10 16:20:01

标签: php macos bash curl ssl

我正在尝试通过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已读过&写入文件夹的权限。

当使用证书的通用名称(我手动添加到系统密钥链)时,来自我自己的帐户和_www的呼叫正常工作

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

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

1 个答案:

答案 0 :(得分:2)

终于找到了解决方案: - )

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

通过Homebrew编译并安装:

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

然后使用PEM格式证书发送curl请求,如Linux中所示(P12格式仅受OS X curl支持,使用安全传输编译)。

例如,使用HTTPful发送客户端身份验证请求:

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

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

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

相关问题