我正在尝试通过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不支持)
最佳答案 终于找到了解决方案:-)
首先,您需要使用OpenSSL(默认使用安全传输)和PHP使用此卷曲编译自己的卷曲(默认使用系统卷曲).
通过Homebrew编译和安装:
brew install curl --with-openssl
brew install php56 --with-homebrew-curl
然后使用PEM格式证书发送curl请求,如Linux中所示(P12格式仅由OS X curl支持,使用Secure Transport编译).
例如,使用HTTPful发送客户端身份验证请求:
Request::get('https://127.0.0.1:12345/ping')->authenticateWithCert(
'client-auth.crt',
'client-auth.key'
);
关于-61错误,我想这是因为Apache中的PHP(在_www下运行)没有访问钥匙串的权限.安全传输将首先将P12证书导入登录密钥链(导致此错误),然后从其签署请求(这将提示并请求许可).
我试图在我的帐户下运行Apache但仍遇到此问题.它可能与不同的环境变量有关.