在应用程序购买(沙盒)中 - 由于curl / SSL,收据验证失败

时间:2012-07-17 12:03:07

标签: php ios curl in-app-purchase sandbox

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

我将问题跟踪到我联系iTunes服务器的php/curl代码(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)

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

任何线索?

也许我应该将'live'iTunes服务器用于沙箱和现场,详见此处? in app purchase, production receipt validation now validating sandbox purchases?

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

编辑我修改了我的sandbox-php代码以使用LIVE iTunes服务器(网址:https://buy.itunes.apple.com/verifyReceipt),测试用户购买/回购现在正在运行。我仍然感到困惑...... sandbox服务器是否已被弃用?它是否使用与证书已被撤销的实时环境不同的SSL证书来识别自己?

1 个答案:

答案 0 :(得分:3)

看起来Apple最近重新使用了Sandbox 的SSL证书,并且使用主题备用域名sandbox.itunes.apple.com正确签名。 但是没有签名使用正确的URL(或者只使用Live中的那个,而不是使用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。使用SAN的Apple证书续订可能会破坏任何早于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 cert pem文件