2012-07-17 80 views
1

我注意到我的服务器端收据验证代码仅失败的沙箱(我的应用程序在商店的实时版本工作正常,但在Xcode,我正在测试下一个版本,收据验证总是失败)。在应用程序购买(沙箱) - 收据验证失败,因为卷曲/ SSL

我跟踪这个问题到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) 

我不知道这有什么与俄罗斯的家伙,他的黑客... 但它只发生在我的沙箱代码。现场版似乎在工作...

任何线索?

也许我应该使用“live”iTunes服务器来同时处理沙盒和现场直播,详情如下? in app purchase, production receipt validation now validating sandbox purchases?

(不知道这个变化是它仍然OK?)

编辑我修改了我的沙箱PHP代码使用LIVE iTunes服务器(网址:https://buy.itunes.apple.com/verifyReceipt),以及测试 - 用户购买/回购正在起作用。我仍然感到困惑...沙盒服务器是否已被弃用?它是否证明自己的SSL证书不同于而不是现场环境,哪个证书已被吊销?

+0

你试图访问的沙箱网址不使用SSL ? – JamesHalsall 2012-07-17 12:38:32

+0

你的意思是'http'而不是'https'?没有;这样做有什么好处吗? – 2012-07-17 12:41:13

+0

是的,不管..不工作没有https – JamesHalsall 2012-07-17 12:42:44

回答

3

看起来像苹果最近重新为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来说不是什么大问题,因为它是测试环境中的测试用户。

编辑:

事实上,苹果公司指出,与默认的CA证书束卷曲之前7.18.0安装是严重过时。 http://curl.haxx.se/docs/sslcerts.html

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

编辑:

我想在这里添加另一个侧面说明。看起来好像在cURL版本7.19.7中存在一个处理主题替代名称的错误修复。

  • 的libcurl-的OpenSSL无法检验某些证书具有主题备用名称

因此,这实际上可能是部分苹果,部分卷曲。随着SAN的使用,Apple的证书续约可能会破坏7.19.7之前的任何版本。我们仍在测试我们的服务器是否属于这种情况。

编辑:

我们发现,这个问题是不是我们用卷曲的版本,但它与我们需要卷曲指向CA证书的PEM文件。它是通过卷曲链接#2以上,但在PHP它看起来像这样:

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

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

+0

谢谢...我怀疑这类事情。 Sandbox与否,deopping SSL不会正确...使用buy.itunes作为沙箱收据的任何缺点? (除了加载活服务器) – 2012-07-20 19:05:54

+0

嗯,我不确定你实际上可以验证沙箱收据与实时服务器。我试着在我的设备上找回收据无效。这就是为什么我告诉cURL不要验证SSL证书。 – 2012-07-24 17:24:51

+0

奇怪;它正在为我工​​作。苹果是否已经“修复”了它? – 2012-07-24 19:54:29