web-dev-qa-db-ja.com

APNS ssl://gateway.sandbox.Push.Apple.com:2195接続が失敗する

プッシュ通知サーバーを作成しようとしています。 telnetでssl://gateway.sandbox.Push.Apple.com:2195に接続します。

telnet gateway.sandbox.Push.Apple.com 2195
Trying 17.172.232.229...
Connected to gateway.sandbox.Push-Apple.com.akadns.net.
Escape character is '^]'.

私の* .pemは大丈夫です(別のサーバーで使用しています)。私は他のサーバーで同じプロジェクトを使用しますが、そこで動作しますが、他のサーバーのクローンは動作しません。

これらのエラーが表示されます。

Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Unknown error) in /var/www/try.php on line 69

証明書は期限切れではなく、他のサーバーで機能し、日付は同じです。

誰かが間違いの可能性を知る手掛かりを持っていますか?

私は取り組んでいます

Apache/2.2.9 (Debian) PHP/5.2.17-0.dotdeb.0 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g

編集:異なるサーバーで同じ証明書を使用しても機能しないようです。たぶん、これはApplesサーバーによってブロックされています。

15
Starbax

このために apn_on_Rails を使用しますが、pem fileを使用している限り、これは機能すると思います。証明書と中間証明書を再ダウンロードし、次の手順を使用してプッシュ通知pemファイルを再生成することでこれを修正しました。

Appleアプリケーションの証明書を取得したら、キーとApple証明書をp12ファイルとしてエクスポートします。これを行う方法の簡単な説明を次に示します。 :

1. Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key. 
2. Right click and choose `Export 2 items…`. 
3. Choose the p12 format from the drop down and name it `cert.p12`.

Now covert the p12 file to a pem file:  

  $ openssl pkcs12 -in cert.p12 -out Apple_Push_notification_production.pem -nodes -clcerts
14
coneybeare

この種のエラーは、次の2つの状況で発生します。

  1. 2195ポートがブロックされている場合。
  2. .pemファイルは正しく作成されません(私の場合のように)。

これらの2つのポイントを試してください。間違いなくエラーは発生しません。

6
Himanshu Mohan

私は同じ問題を抱えていましたが、私の場合の解決策は、絶対パスを必要とするそのPEM証明書でした

  1. 相対パスではなく、秘密キーの絶対パスを使用します。
  2. Phpユーザー(または、www-data、Apache、nginx、www ...に応じてWebサーバーユーザー)がそれを読み取ることが許可されていることを確認します(chown、chmod)。

from ここ

3
supermus

ISPブロックポート2195と2196かもしれません。同じ問題があったので、それを開くように頼みましたが、うまくいきました。

2
dgeneva

あなたは言及します:

私は他のサーバーで同じプロジェクトを使用しますが、そこで動作しますが、他のサーバーのクローンは動作しません。

.pem証明書は転送されないことがわかりました。あるOS Xマシンで動作するアプリを別のOS Xマシンで動作させるために私が従った手順は次のとおりです(Apple以外のマシンでそれを行う方法がわかりません)。

  1. 最初のサーバーの.p12ファイル(証明書とコンパニオンの秘密キー)をコピーします。
  2. その.p12ファイルをキーチェーンにコピーします。そこで証明書になります。
  3. その証明書を(コンパニオンプライベートキーとともに)new .p12ファイルにエクスポートします。
  4. Opensslを使用して、その新しい.p12ファイルを新しい.pemファイルに変換します
  5. これで、新しいサーバーのopensslコマンドで新しい.pemファイルを使用できます。

これがお役に立てば幸いです

1
Thomas O'Dell

役立つ可能性のあるインターネットからのランダムな発見:

証明書の問題である可能性があります。ストリームオプションallow_self_signedおよびverify_peerを試して、それを確認してください。

明示的にsslv2://またはsslv3://を使用してみてください?

「/ dev/urandom」のアクセス許可の問題

1
user1316813

Linuxボックスでも同様の問題がありました。私にとって、それはSELinuxの問題でした。

/ etc/selinux/configファイルで、SELINUX = enforcingSELINUX = disabledに設定します。そして再起動します。それでおしまい。

1
Kashif