1

我注意到我的服务器端收据验证代码仅在沙箱中失败(商店中我的应用程序的实时版本运行良好,但在我正在测试下一个版本的 Xcode 上,收据验证总是失败)。

我将问题跟踪到php/curl我联系 iTunes 服务器 ( https://sandbox.itunes.apple.com/verifyReceipt) 的代码中,我从以下位置收到此错误curl

SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:func(144):reason(134)

我想知道这是否与俄罗斯人和他的黑客有什么关系......但它只发生在我的沙箱代码中。现场版似乎正在工作......

有什么线索吗?

也许我应该对沙盒和实时使用“实时”iTunes 服务器,如此处详述? 在应用程序购买中,生产收据验证现在验证沙盒购买?

(不知道这个变化。还可以吗?)

编辑我修改了我的 sandbox-php 代码以使用 LIVE iTunes 服务器 (URL: https://buy.itunes.apple.com/verifyReceipt),并且测试用户购买/回购现在正在工作。我还是很疑惑……沙盒服务器已经被弃用了吗?它是否使用与实际环境不同的 SSL 证书来标识自己,哪个证书已被吊销?

4

1 回答 1

4

看起来 Apple 最近为 Sandbox 重新提供了 SSL 证书,并且它使用主题备用名称域 sandbox.itunes.apple.com 正确签名。 但没有使用正确的 URL 对其进行签名(或者只是使用了 Live 中的 URL 并且没有使用 Sandbox)。他们改为使用buy.itunes.apple.com 签署它,这破坏了任何cURL 请求(我们的服务器也有同样的问题)。作为目前的解决方法,我们使用了以下选项:

if ($isSandbox) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

这会关闭 SSL 验证,因此请谨慎使用,因为它可能导致中间人攻击。我认为这对 Sandbox 来说没什么大不了的,因为它是在测试环境中测试用户。

编辑:

实际上,Apple 指出在 7.18.0 之前安装默认 cURL 的 CA 证书包已经严重过时。http://curl.haxx.se/docs/sslcerts.html

我们最近可能有一个服务器更新破坏了我们的 cURL 安装,但我不是我们的系统管理员,所以我真的不确定。但是请看一下链接,因为它包括我上面提到的解决方法(#1),以及其他一些选项,包括更新 CA 证书包。

编辑:

我想在这里添加另一个旁注。似乎 cURL 版本 7.19.7 中有一个处理主题备用名称的错误修复。

  • libcurl-OpenSSL 无法使用主题备用名称验证某些证书

所以这实际上可能部分是Apple,部分是cURL。Apple 使用 SAN 更新证书可能会破坏任何早于 7.19.7 的版本上的任何内容。我们仍在测试我们的服务器上是否是这种情况。

编辑:

我们发现问题不是我们使用的 cURL 版本,而是我们需要 cURL 指向的 CA cert pem 文件。通过上面的 cURL 链接它是 #2,但在 PHP 中它看起来像这样:

if ($isSandbox) curl_setopt($ch, CURLOPT_CAINFO, '/etc/ssl/certs/cacert.pem');

您可以从http://curl.haxx.se/docs/caextract.html获取最新的 CA 证书 pem 文件

于 2012-07-20T17:32:24.937 回答