2012-07-17 38 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

相關問題