Невозможно подключиться к ssl: //gateway.push.apple.com: 2195 (Тайм-аут соединения) - PullRequest
4 голосов
/ 28 марта 2012

Я схожу с ума от Apple push-уведомлений! Я разработал свое приложение и тестовые уведомления, следуя инструкции Ray Wanderlich , и все работало нормально, пока я не изменил файл .pem с дистрибутивом и не изменил строку подключения с gateway.sandbox.push-apple.com на gateway.push-apple.com.

Теперь, если я пытаюсь отправить сообщение, сервер возвращает

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to     ssl://gateway.push.apple.com:2195 (Connection timed out)
Failed to connect: 110 Connection timed out

Файл php и файл .pem находятся на TMDHosting: я пытаюсь спросить их, закрыт ли номер порта 2195, потому что поиск в Google обнаружил, что ошибка означает, что порт закрыт.

Хотя я не могу понять, связана ли ошибка с сертификатом или с сервером.

Странно то, что если я следую процедуре с Терминалом, чтобы проверить файл .pem, кажется, что все работает

CONNECTED(00000003)
    depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
    verify error:num=20:unable to get local issuer certificate
    verify return:0
    ---
    Certificate chain
     0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet     Services/CN=gateway.push.apple.com
       i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
     1 s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
       i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c)     1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)
---
Server certificate
-----BEGIN CERTIFICATE-----
    MIIEXTCC..........
-----END CERTIFICATE-----
    subject=/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet         Services/CN=gateway.push.apple.com
    issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)      2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 2541 bytes and written 2039 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-SHA
    Server public key is 1024 bit
    Secure Renegotiation IS supported
   Compression: NONE
   Expansion: NONE
    SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
        Session-ID: 
        Session-ID-ctx: 
        Master-Key:     CBA98981BB512ED2FDF0C003F4556FDDA564BEBBEFC6528C37D8E0336BC141AEC6D7E014568B334B8330FFFE266E8CB4
    Key-Arg   : None
    Start Time: 1332945845
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

Это позволяет мне думать, что это не проблема .pem ...

Я не прав?

Я уже прочитал все подобные вопросы здесь и пытался изменить номер порта с 2195 на 30, но ничего не изменилось. Намеки?

РЕДАКТИРОВАТЬ : я обнаружил , что , и, кажется, соответствует моей проблеме: TMDHosting сказал мне

... вы находитесь в среде общего хостинга и открываете Порт для вас будет невозможен. Однако обратите внимание, что адрес который вы делаете подключение через порт 2195 не связан с наш сервер. Другими словами, вы пытаетесь установить связь с удаленный сервер на порт 2195. Для того, чтобы сделать это подключение к указанный выше порт, убедитесь, что порт открыт для входящие соединения на удаленном сервере, а не на сервере на на который полагается ваш аккаунт у нас.

Нужен ли VPS?

EDIT2

В уроке, за которым я следовал, я нашел

.. вам понадобится сервер, подключенный к Интернету. От себя уведомления всегда отправляются сервером. Для разработки вы можете использовать ваш Mac в качестве сервера (что мы сделаем в этом руководстве), но для производственное использование, вам нужно хотя бы что-то вроде VPS (Virtual Частный сервер). Дешевый общий хостинг недостаточно хорош. Вы должны быть в состоянии запустить фоновый процесс на сервере, установить SSL-сертификат и возможность устанавливать исходящие TLS-соединения на определенные порты. Большинство провайдеров виртуального хостинга не позволяют вам сделать это, хотя они могут, если вы спросите. Тем не менее, я действительно рекомендую использовать VPS хост, такой как Linode.

Наконец-то я думаю, что мне нужен VPS. Вы можете подтвердить наверняка? Но почему, если я отправляю push-уведомление с сервера песочницы, он работает правильно без VPS?

ПОСЛЕДНИЕ ОБНОВЛЕНИЯ : (надеюсь, кому-то помочь) похоже, что произошла ошибка, потому что правильно то, что я не могу отправить push-уведомление ни в песочницу, ни в производство сервер с моего хостинга (TMDHosting): мой общий хостинг не имеет открытого порта 2195. Сменил провайдера: все работает.

1 Ответ

0 голосов
/ 12 апреля 2012

Miwi,

Спасибо за эту подробную запись.

У нас похожая проблема, и это сводит нас с ума.

Когда мы проверяем сертификат, он появляетсяработать, кроме: «проверить ошибку: num = 20: невозможно получить сертификат локального эмитента»

В любом случае, мы получаем правильное рукопожатие с тестом командной строки openssl, так же, как вы делаете.

Мы также можем заставить работать сертификат песочницы / разработчика.

Можете ли вы сообщить нам, на какого провайдера вы переключились, на тот случай, если нам понадобится сделать переход?

Спасибо.

...