stream_socket_client failing on my server with no way to know more about the error

◇◆丶佛笑我妖孽 提交于 2019-12-01 18:01:00

问题


This code: (https://github.com/stuffmc/Safari-Push-Notifications/blob/master/index.php#L195)

stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 
                      60, STREAM_CLIENT_CONNECT, $streamContext);

returns false, but with no errors. It means that when I'm sending to /v1/push it fails for every device/token :( The PHP documentation says:

If the value returned in errno is 0 and the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket.

I have this code running perfectly for a website (dev/beta/staging) and now that I'm trying to move to production, it doesn't.

I should note though that calling

$ openssl s_client -connect gateway.push.apple.com:2195 -cert MyC.pem -key myK.pem

perfectly works. I have a prompt where I can type characters and when typing enter, it exits — same as with my dev test.

I also have nothing sent to /v1/log (as mentionned at https://devforums.apple.com/thread/203825) and so I'm clueless as to where the problem would be :(


回答1:


I fixed my problem by generating the .pem this way:

openssl pkcs12 -in key-chain-export.p12 -out apple_push_cert_production.pem -nodes -clcerts

I still would love to know how I could have had a "hint" (from PHP or openssl) that it's the certificate.

AND: Although it fixed the problem on the server side, I then got problems on the client side. Oh well.....

I should also mention I fixed the code on the server so that /v1/log gets something from Apple.

See https://github.com/surrealroad/Safari-Push-Notifications/commit/0ae8a3ad3327a957c332090ea1bfcb146a40c5f3



来源:https://stackoverflow.com/questions/24928311/stream-socket-client-failing-on-my-server-with-no-way-to-know-more-about-the-err

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!