【问题标题】:In App Purchase (Sandbox) - Receipt Validation Fails Because of curl / SSL应用内购买(沙盒) - 由于 curl / SSL 收据验证失败
【发布时间】:2012-07-16 08:22:40
【问题描述】:

我注意到我的服务器端收据验证代码仅在沙盒中失败(商店中我的应用程序的实时版本运行良好,但在我正在测试下一个版本的 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 服务器用于沙盒和实时,如此处详述? in app purchase, production receipt validation now validating sandbox purchases?

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

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

【问题讨论】:

  • 您是否尝试过不使用 SSL 访问沙盒 url?
  • 您的意思是“http”而不是“https”?不;这样做有什么好处吗?
  • 是的,没关系..没有 https 就不行
  • 我的意思是,SSL 的全部意义在于防止中间人攻击和类似的攻击,对吧?但现在想来,是沙盒所以应该没问题...?
  • 哦,好的。您现在有任何沙盒 IAP 应用程序在运行吗?

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


【解决方案1】:

看起来 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 证书 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文件

【讨论】:

  • 谢谢...我怀疑是这样的。沙盒与否,解除 SSL 并不正确……使用 buy.itunes 获取沙盒收据有什么缺点吗? (除了加载实时服务器)
  • 好吧,我不确定您是否可以通过实时服务器验证沙盒收据。我在我的设备上试了一下,发现收据无效。这就是为什么我告诉 cURL 不要验证 SSL 证书。
  • 更正:它对我有用(现在,所有沙盒收据都无效)。我浏览了您的链接,但不太明白(此处为计算机图形专家)。我会试试你的 php sn-p...
  • 我会试试 .pem 版本。但我在共享服务器上(我认为无法访问 /etc/ssl/)。我应该把 .pem 文件放在哪里?是否应该受到保护?
  • 现在我得到这个错误:error setting certificate verify locations: CAfile: /test/service/mobile/deliver/support/cacert.pem CApath: none
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2017-05-25
  • 2014-02-25
  • 2011-10-12
  • 2010-11-20
  • 1970-01-01
相关资源
最近更新 更多