IOS Push mukodik PC-n de nem megy a serveren

IOS Push mukodik PC-n de nem megy a serveren
2020-04-03T10:21:43+02:00
2020-05-01T14:43:22+02:00
2022-10-15T21:25:52+02:00
frankcrk
Sziasztok,

irtam egy .net core console app-ot (service lesz kesobb) ami kikuld PUSH uzeneteket az APNS-nek egy adatbazisbol. A dolog tokeletesen mukodik PC-rol (win10, win7) probaltam tobbrol is. Viszont ha ugyanezt az progit atrakom a serverre (WinServer2012 R2) akkor ezt az uzenetetet kapom az APNS-tol:  "The message received was unexpected or badly formatted."
A program self-contained, hogy tuti minden szukseges dll...stb benne legyen. Gondoltam ra, hogy valami a proxy-val a serveren, de a fura, hogy eleri az APNS-t cask az uzenet formatuma valamiert mas a hibauzenet szerint. Gondolom a proxy nem valtoztat az uzeneten magan...vagyis nem lattam meg olyat. Gondoltam ra, hogy talan az OS a serveren kezeli mashogy a protokolokat, de azzal sem tudom mit kezdjek ha esetleg az a gond. Kerestem a neten mindenfele de nem igazan talalok megoldast. Stackoverflow-ra is beirtam de 1 honap alatt senkinek nem volt megoldasa.
Valaki talalkozott mar ilyennel, vagy van barmi otlete hogyan lehetne megoldani?
A kod ami a PUSH-t kuldi:

var url = string.Format("https://api.sandbox.push.apple.com:443/3/device/{0}", PMsg.DeviceToken); var certData = System.IO.File.ReadAllBytes(string.Format(@"{0}\APNSCerts\{1}APNS.p12", servicePath, PMsg.AppID)); var certificate = new X509Certificate2(certData, "", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable); var topic = $"com.blabla.{PMsg.AppID}"; using (var httpHandler = new System.Net.Http.HttpClientHandler { SslProtocols = SslProtocols.Tls12 }) { httpHandler.ClientCertificates.Add(certificate); using (var httpClient = new HttpClient(httpHandler, true)) using (var request = new HttpRequestMessage(HttpMethod.Post, url)) { request.Headers.Add("apns-id", Guid.NewGuid().ToString("D")); request.Headers.Add("apns-push-type", (PMsg.SilentMsg ? "background" : "alert")); request.Headers.Add("apns-priority", (PMsg.SilentMsg ? "5" : "10")); request.Headers.Add("apns-topic", topic); JObject payload = new JObject { }; JObject aps = new JObject { }; if (PMsg.CmdToDo != null && PMsg.CmdToDo.Length > 1) aps.Add(new JProperty("content-available", 1)); payload.Add(new JProperty("msgID", PMsg.MsgID)); if (PMsg.CmdToDo != null && PMsg.CmdToDo.Length > 1) { payload.Add(new JProperty("cmd", PMsg.CmdToDo)); } payload.Add(new JProperty("aps", aps)); request.Content = new StringContent(payload.ToString()); request.Version = new Version(2, 0); using (var httpResponseMessage = httpClient.SendAsync(request).GetAwaiter().GetResult()) { var responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result; } } }
Mutasd a teljes hozzászólást!
Az 
api.sandbox.push.apple.com
csak a TLS 1.2 protokolt támogatja.

Protocols
TLS 1.3
No
TLS 1.2
Yes
TLS 1.1
No
TLS 1.0
No
SSL 3
No
SSL 2
No


A Windows Server 2012-ig egy alkalmazás csak akkor tudja a TLS 1.2  protokolt használni ha ténylegesen beállítja, mint szükséges security protocol.

Vagy a program-ba beleírod, vagy lehet ügyeskedni:

{{search404Captions.content404Title}}

A Win2008-ra telepíteni kell a TLS 1.2 támogatást mert alapból nincs benne:

{{search404Captions.content404Title}}

Az is lehet, hogy a szerveren nincs engedélyezve a TLS 1.2 használata.

Ezzel a utility-vel le lehet ellenőrizni:

Nartac Software - IIS Crypto
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd