【问题标题】:Write permissions error (OSStatus -61) when reading p12 certificate on OSX在 OSX 上读取 p12 证书时出现写入权限错误(OSStatus -61)
【发布时间】:2014-04-13 21:02:48
【问题描述】:

我正在尝试在 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 中不支持)

【问题讨论】:

  • 您是通过 https 进行的,这意味着您是以网络服务器的身份进行的。该用户是否有权访问您的主目录?仅仅因为它可以访问(比如说)sandbox 并不意味着它实际上可以首先到达那里。
  • 我可以毫无问题地从 php 执行 cat /Users/[my account]/Sites/sandbox/certificate.p12
  • 有解决方案吗?我在 10.10.1 遇到了同样的问题

标签: php macos bash curl ssl


【解决方案1】:

终于找到解决办法了:-)

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

通过 Homebrew 编译和安装:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 2014-11-19
    • 2016-11-04
    • 2011-01-11
    相关资源
    最近更新 更多