1

サーバー側のレシート検証コードがサンドボックスでのみ失敗していることに気付きました(ストア内のアプリのライブバージョンは正常に機能しますが、次のバージョンをテストしているXcodeでは、レシート検証は常に失敗します)。

php/curliTunesサーバーに接続するコード( )まで問題を追跡しましたが、次の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コードを変更してLIVEiTunesサーバー(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 である可能性があります。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 ファイルを取得できます。

于 2012-07-20T17:32:24.937 に答える