PHPを使用して成功したiPhoneに通知をプッシュしようとしています。ただし、C# を使用して Apple のプッシュ サーバーへのソケット接続を開くことができません。PHPで次のコードを使用して通知を正常にプッシュできるため、証明書自体に問題はないと思います。
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'cert.pem');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
fwrite($fp, $msg);
以下のコードを使用して C# で認証しようとすると、Apple はすぐに接続を閉じます。「トランスポート接続からデータを読み取れません: 既存の接続がリモート ホストによって強制的に閉じられました。」という例外が発生します。
sslStream.AuthenticateAsClient(hostname, certificatesCollection, SslProtocols.Default, false);
私は基本的にこの質問からすべてのコードを取得しました: C# iPhone push server?
C#では.PEMファイルをプログラムでロードすることはできないと思うので、証明書に問題があるのではないかと思いました。OpenSSL を使用して .PFX ファイルに変換しましたが、それでも同じ問題が発生します。
この(証明書の可能性がある)問題をどのようにトラブルシューティングできますか?