Pushsharp 发送苹果通知失败:SSL Stream 无法验证为客户端
Pushsharp send apple notification failed : SSL Stream Failed to Authenticate as Client
我尝试在 IIS 上托管的 ASP.NET MVC 项目上使用 Pushsharp 库向苹果设备发送推送通知。
我的代码:
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- 我尝试使用 https://pushtry.com/ 发送推送通知,它工作正常,所以问题不是来自证书文件或密码。
pushsharp 内部的问题或缺少配置必须在我的机器上完成,有人知道吗?
我认为该问题与 Push Sharp 有关,因此请通过将名为 ApplePushChannel.cs 的 class 中的 SSl3 更改为 Tls 来尝试此解决方案
这是变化
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);
希望这对你有所帮助
我的问题通过使用以下命令从 pem 生成 p12 文件得到解决,而不是通过重命名文件扩展名。
openssl pkcs12 -export -inkey sofwareKey.pem -in software_Prod.pem -out cert_key.p12
查看更多
可能对任何人都有帮助。
截至 2019 年 7 月 23 日,这件事刚刚发生在我身上。看起来 Apple 现在正在
为沙盒 voip 推送通知服务器强制执行 TLS 1.2
gateway.sandbox.push.apple.com - port 2195
feedback.sandbox.push.apple.com - port 2196
我发现我必须从 https://github.com/Redth/PushSharp(master 分支)中检查最新的代码,构建它,然后在我的项目中手动添加对构建的 DLL 的引用。
之前我使用的是 NuGet PushSharp 包,该包现在已有 3 年历史且未更新。如果您查看 master 分支上最近的提交,那里有一些与 Apple 和 TLS 相关的更改,所以我确信这已经修复了它。
我尝试在 IIS 上托管的 ASP.NET MVC 项目上使用 Pushsharp 库向苹果设备发送推送通知。
我的代码:
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- 我尝试使用 https://pushtry.com/ 发送推送通知,它工作正常,所以问题不是来自证书文件或密码。
pushsharp 内部的问题或缺少配置必须在我的机器上完成,有人知道吗?
我认为该问题与 Push Sharp 有关,因此请通过将名为 ApplePushChannel.cs 的 class 中的 SSl3 更改为 Tls 来尝试此解决方案 这是变化
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);
希望这对你有所帮助
我的问题通过使用以下命令从 pem 生成 p12 文件得到解决,而不是通过重命名文件扩展名。
openssl pkcs12 -export -inkey sofwareKey.pem -in software_Prod.pem -out cert_key.p12
查看更多
可能对任何人都有帮助。
截至 2019 年 7 月 23 日,这件事刚刚发生在我身上。看起来 Apple 现在正在
为沙盒 voip 推送通知服务器强制执行 TLS 1.2gateway.sandbox.push.apple.com - port 2195
feedback.sandbox.push.apple.com - port 2196
我发现我必须从 https://github.com/Redth/PushSharp(master 分支)中检查最新的代码,构建它,然后在我的项目中手动添加对构建的 DLL 的引用。
之前我使用的是 NuGet PushSharp 包,该包现在已有 3 年历史且未更新。如果您查看 master 分支上最近的提交,那里有一些与 Apple 和 TLS 相关的更改,所以我确信这已经修复了它。