Не удалось отправить push-уведомление Apple: не удалось аутентифицировать поток SSL в качестве клиента
Я пытаюсь отправить push-уведомление на устройства Apple с помощью библиотеки Pushsharp в проекте ASP.NET MVC, размещенном на IIS.
Мой код:
public static void SendAppleNotification()
{
// Configuration (NOTE: .pfx can also be used here)
byte[] arr = File.ReadAllBytes("D:\\MySoftware\\pa_Dev.pem");
var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox,
arr, "1234");
// Create a new broker
var apnsBroker = new ApnsServiceBroker(config);
// Wire up events
apnsBroker.OnNotificationFailed += (notification, aggregateEx) => {
aggregateEx.Handle(ex => {
// See what kind of exception it was to further diagnose
if (ex is ApnsNotificationException)
{
var notificationException = (ApnsNotificationException)ex;
// Deal with the failed notification
var apnsNotification = notificationException.Notification;
var statusCode = notificationException.ErrorStatusCode;
Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");
}
else
{
// Inner exception might hold more useful information like an ApnsConnectionException
Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
}
// Mark it as handled
return true;
});
};
apnsBroker.OnNotificationSucceeded += (notification) => {
Console.WriteLine("Apple Notification Sent!");
};
// Start the broker
apnsBroker.Start();
// Queue a notification to send
apnsBroker.QueueNotification(new ApnsNotification
{
DeviceToken = "660E4433785EFF2B2AA29D5076B039C969F1AADD839D79261328F40B08D26497",
Payload = JObject.Parse("{\"aps\":{\"badge\":7}}")
});
// Stop the broker, wait for it to finish
// This isn't done after every message, but after you're
// done with the broker
apnsBroker.Stop();
}
Примечания: 1. Попытался изменить расширение pem на p12, но проблема все еще возникала. 2- Я пытался отправить push-уведомление с помощью https://pushtry.com/ и он работает нормально, поэтому выдача не из файла сертификата или пароля.
Проблема внутри pushsharp или отсутствуют конфигурации должны быть сделаны на моей машине, кто-нибудь есть идеи?
2 ответа
Проблема устранена путем генерации файла p12 из pem с помощью приведенной ниже команды, а не путем переименования расширения файла.
openssl pkcs12 -export -inkey sofwareKey.pem -in software_Prod.pem -out cert_key.p12
узнать больше
Это случилось со мной 23 июля 2019 года. Похоже, Apple теперь применяет TLS 1.2 для сервера push-уведомлений VoIP в песочнице на
gateway.sandbox.push.apple.com - port 2195
feedback.sandbox.push.apple.com - port 2196
Я обнаружил, что мне нужно проверить последний код из https://github.com/Redth/PushSharp (главная ветка), собрать его, а затем вручную добавить ссылку на встроенные библиотеки DLL в моем проекте.
Раньше я использовал пакет NuGet PushSharp, которому уже 3 года и который не обновлялся. Если вы посмотрите на последние коммиты в основной ветке, там есть некоторые изменения, связанные с Apple и TLS, поэтому я уверен, что это исправило.
Я думаю, что проблема связана с Push Sharp, поэтому, пожалуйста, попробуйте это решение, изменив SSl3 на Tls в классе под названием ApplePushChannel.cs, и вот изменение
The orginal code in the file is
stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false);
replace it with
stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls, false);
Надеюсь, это поможет тебе