7

我有一个托管在 azure 中的数据服务,我从中向 iphone 发送通知,但是在与 apns 建立连接时,我收到以下错误“对 SSPI 的调用失败。收到的消息是意外的或格式错误。” 我还参考了以下链接以获取相同的错误,但仍然收到错误

带有 APNS 锐利和 C# iPhone 推送服务器的苹果推送通知?

        try
        {
            using (TcpClient client = new TcpClient())
            {

                try
                {
                    client.Connect("gateway.sandbox.push.apple.com", 2195);
                    Logging("TSSLProDi :Connected to Apple");
                }
                catch (Exception ex)
                {
                    Logging("TSSLProDi :" + ex.Message + "-IE-" + ex.InnerException);

                }
                using (NetworkStream networkStream = client.GetStream())
                {
                    Logging("TSSLProDi :Client connected.");

                    X509Certificate clientCertificate = new X509Certificate(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + @"startup\certname.pfx"), "mycertpassword");
                    X509CertificateCollection clientCertificateCollection = new X509CertificateCollection(new X509Certificate[1] { clientCertificate });

                    // Create an SSL stream that will close the client's stream.
                    SslStream sslStream = new SslStream(
                        client.GetStream(),
                        false,
                        new RemoteCertificateValidationCallback(validateServerCertificate),
                        null
                        );

                    try
                    {
                        sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, System.Security.Authentication.SslProtocols.Default, false);
                        Logging("TSSLProDi :slStreamAuthenticated");
                    }
                    catch (AuthenticationException ex)
                    {
                        Logging("TSSLProDi :" + "Exception: " + ex.Message.ToString());
                        if (ex.InnerException != null)
                        {
                            Logging("Inner exception: " + ex.InnerException.Message.ToString());
                        }
                        Logging("TSSLProDi :" + "Authentication failed - closing the connection.");
                        client.Close();
                        return;
                    }
                }

            }
        }
        catch (Exception ex)
        {

            Logging("TSSLProCert :" + ex.Message + "-IE-" + ex.InnerException);
        }

我也在 VM 上安装了所需的证书。 我从苹果获得的 iphone developer_identity 证书上收到的一个警告是“Windows 没有足够的信息来验证此证书”是不是我的 iphone 证书有问题。请帮帮我,我卡住了

4

6 回答 6

6

得到了解决方案我刚刚将 X509Certificate 更改为 X509Certificate2 和 X509CertificateCollection 更改为 X509Certificate2Collection

于 2011-07-19T15:39:31.157 回答
3

我建议您按照本教程中的步骤从您的开发人员证书创建一个 p12 文件。

http://help.adobe.com/en_US/as3/iphone/WS144092a96ffef7cc-371badff126abc17b1f-7fff.html

在 Windows 中注册此文件也很重要。这就像在生成文件后双击文件一样简单。之后不要忘记更新对 X509Certificate 构造函数的调用。

本教程在 Windows 上同样适用,但您可能需要下载 OpenSSL 客户端,该客户端可在此处找到:

http://gnuwin32.sourceforge.net/packages/openssl.htm

于 2011-07-18T13:56:20.327 回答
3

我不知道这在 3 年后是否会有所帮助,但我将答案留给了 iOS8。

Apple 已经更改了服务器安全性,并且就您提到的那一行,您必须从 SSL 更改为 TLS:

原始代码:

_apnsStream.AuthenticateAsClient(host,certificates,System.Security.Authentication.SslProtocols.Ssl3, false); 

新代码:

_apnsStream.AuthenticateAsClient(host,certificates,System.Security.Authentication.SslProtocols.Tls, false);

我希望这些信息对某人有所帮助。

有人在 GIT 论坛上评论了这个

于 2014-10-14T07:31:30.233 回答
1

有点晚了,但是谁知道它是否对某人有帮助...我在证书上犯了一个大错误,并安装了我从 Apple Developer Site 下载的 .CER ...我知道...我的错,但是如果您可能会发生这种情况'和我一样愚蠢:-P

当您下载 .CER 时,您必须将其导入您的钥匙串,然后导出包含私钥的证书......这将生成一个 .P12 证书,这是您必须在 Windows 机器上安装的证书。在 LocalMachine/Personal 商店中安装 .P12 后,身份验证对我来说效果很好。

于 2012-08-08T10:52:45.543 回答
1

我遇到了同样的问题,我使用 .p12 证书文件而不是 .pfx 并使用 moon-apns 发送通知,问题已解决。

在此处下载 Moon-APNS 代码:https ://github.com/arashnorouzi/Moon-APNS

于 2013-01-17T07:12:20.323 回答
0

试试这个 :

SslStream sslStream = new SslStream(client.GetStream(), false);
于 2011-07-18T13:47:41.817 回答