Ошибка сертификата iPhone в apns sharp. Сбой вызова SSPI
У меня есть служба данных, размещенная в Azure, с которой я отправляю уведомление на iphone, но при установлении соединения с apns я получаю следующую ошибку: "Сбой вызова SSPI. Полученное сообщение было неожиданным или плохо отформатировано". Я также ссылался на следующие ссылки на ту же ошибку, но все еще получаю ошибку
пуш-уведомления Apple с APNS Sharp и 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);
}
Я установил необходимые сертификаты на ВМ также.Одно предупреждение, которое я получаю от сертификата iphone developer_identity, полученного от Apple, заключается в том, что "Windows не имеет достаточно информации для проверки этого сертификата", - это что-то не так с моим сертификатом iphone. пожалуйста, помогите мне, я застрял
6 ответов
Получил решение, которое я только что изменил X509Certificate на X509Certificate2 и X509CertificateCollection на X509Certificate2Collection
Я не знаю, будет ли это полезно через 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
Я предлагаю вам выполнить действия, описанные в этом руководстве, чтобы создать файл p12 из сертификата разработчика.
http://help.adobe.com/en_US/as3/iphone/WS144092a96ffef7cc-371badff126abc17b1f-7fff.html
Также важно, чтобы вы зарегистрировали этот файл в Windows. Это так же просто, как дважды щелкнуть файл после его создания. Не забудьте обновить вызов конструктора X509Certificate впоследствии.
Учебник одинаково хорошо работает в Windows, но вам, возможно, придется скачать клиент OpenSSL, который можно найти здесь:
У меня та же проблема, я использую файл сертификата.p12 вместо.pfx и использую moon-apns для отправки уведомления, проблема была решена.
Загрузите код Moon-APNS здесь: https://github.com/arashnorouzi/Moon-APNS
Немного поздно, но кто знает, поможет ли это кому-нибудь... Я допустил большую ошибку с сертификатом и установил.CER, который я скачал с сайта разработчиков Apple... Я знаю... я виноват, но это может произойти, если вы ты такой же тупой, как и я:-P
Когда вы загружаете.CER, вы должны импортировать его в цепочку для ключей, а затем экспортировать сертификат, включающий в себя закрытый ключ..., который сгенерирует сертификат.P12, и это тот, который вы должны установить на машине Windows. После того, как я установил.P12 в LocalMachine/Personal store, аутентификация работала для меня очень хорошо.
Попробуй это:
SslStream sslStream = new SslStream(client.GetStream(), false);