我正嘗試建立與Apple APNS服務的連接。我在Ubuntu上運行Mono。用於使連接在Windows環境中工作的代碼沒有問題。該代碼是NT服務(系統進程)的一部分,而不是網站或服務。在Ubuntu上使用Mono連接到APNS服務
以下是關於環境的一些信息: Ubuntu 12.10。 單聲道3.0.5。 使用Mono的Certmgr:
- 我在Mono機器證書商店(MY)安裝了APNS證書。
- 我在Mono機器證書商店(密鑰對)中安裝了APNS證書私鑰。
- 我在Mono機器證書商店(TRUST)安裝了Entrust.net證書頒發機構(2048)根證書。
- 我在Mono機器證書商店(CA)安裝了Entrust認證中心 - 1LC中級證書。
Telnet能夠達到gateway.push.apple.com:2195。 我正在調試MonoDevelop中的代碼。 MonoDevelop以Root(gksudo)身份運行。
這裏是我收到的錯誤:
System.IO.IOException: The authentication or decryption has failed. --->
Mono.Security.Protocol.Tls.TlsException: The authentication or decryption has failed.
at Mono.Security.Protocol.Tls.RecordProtocol.ProcessAlert (AlertLevel alertLevel, AlertDescription alertDesc) [0x00000] in <filename unknown>:0
at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 }
這裏是我用來建立連接的代碼:
m_client = new TcpClient("gateway.push.apple.com", 2195);
m_ssl = new SslStream(m_client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
m_ssl.AuthenticateAsClient("gateway.push.apple.com", m_certColl, System.Security.Authentication.SslProtocols.Tls, false);
從調試程序的更多信息:
m_certColl包含1個證書,APNS證書,因爲它應該。 我在調試器中確認公鑰和私鑰都是 都被填充。 RemoteCertificateValidationCallback返回 無SslPolicyErrors。我可以確認該鏈包括3 證書。 1包含蘋果公司的 gateway.push.apple.com的公鑰,1包含Entrust的中級證書 證書,1包含Entrust的根證書。
我已經雙倍和三倍檢查了一切,我只是不知道從哪裏去。任何幫助將非常感激!