ゆれくるコール開発日誌

ゆれくるコール、あめふるコール、つながるコールや緊急地震速報のことなど

C#でAPNS Sandboxに接続できない

C#でAPNS Sandboxに接続できない、というか接続できなくなった。


以前は同じコードで問題なく接続できていたんだけど、10月6日あたりから接続できなくなった模様。。

コードはこんな感じ。

//Connect
TcpClient apnsClient = new TcpClient();
apnsClient.Connect("gateway.sandbox.push.apple.com", 2195);

//Open SSL Stream
SslStream apnsStream = new SslStream(apnsClient.GetStream(), false, new RemoteCertificateValidationCallback(validateServerCertificate), new LocalCertificateSelectionCallback(selectLocalCertificate));
apnsStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", certificates, System.Security.Authentication.SslProtocols.Ssl3, false);


SslStream.AuthenticateAsClient()でIOException発生、「トランスポート ストリームから予期しない EOF または 0 バイトを受信しました。」とかいわれちゃう。
Sandbox環境だし、メンテでもしてるのかな~とその時は放置。


そして本日10月21日、再度Sandboxに接続を試みるも、やっぱり同じエラー。。
こんなに長い間つながんないのもおかしいな~と、いろいろググってみるも目ぼしい情報もなし。。
そんな中で、Twitterで下記のツイートを発見。



そういえばPOODLE問題、各所で話題になってるよな~、と思いながら思い当たるフシが!
SslStream.AuthenticateAsClient()の引数でプロトコルを指定してるじゃありませんか!


プロトコルの指定をSystem.Security.Authentication.SslProtocols.Ssl3から、System.Security.Authentication.SslProtocols.Tlsにかえてみたところ、無事Sandboxに接続できました♪


ちなみに10月21日現在、Production環境でのAPNS接続は修正前のコードでも動作しています。
いずれProduction環境でもSSL3だと接続できなくなるのでしょうかねー。


でもこのSSLのPOODLE問題って、10月14日に発表されてますよね?
Sandboxに接続できなくなったタイミングはそれより前の10月6日あたり。。
なんでですかねー???


(2014/10/23追記)
Appleより、10/29を持ってProduction環境でもSSL3のサポートをやめるとのアナウンスがありました。

Update to the Apple Push Notification Service - News and Updates - Apple Developer


こちらも参考に。