Apple の APNS サービスへの接続を確立しようとしています。UbuntuでMonoを実行しています。接続を確立するために使用されているコードは、Windows 環境で問題なく動作します。コードは、Web サイトやサービスではなく、NT サービス (システム プロセス) の一部です。
環境に関する情報は次のとおりです。Ubuntu 12.10。モノ 3.0.5。Mono の Certmgr の使用:
- APNS 証明書を Mono マシンの証明書ストア (MY) にインストールしました。
- APNS 証明書の秘密鍵を Mono マシンの証明書ストア (キーペア) にインストールしました。
- Entrust.net 認証局 (2048) ルート証明書を Mono マシンの証明書ストア (TRUST) にインストールしました。
- Entrust Certification Authority - 1LC Intermediate Certificate を Mono マシンの証明書ストア (CA) にインストールしました。
Telnet は、gateway.push.apple.com:2195 に到達できます。MonoDevelop でコードをデバッグしています。MonoDevelop はルート (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 の Apple の公開鍵を含み、1 つは Entrust の中間証明書を含み、1 つは Entrust のルート証明書を含みます。
私はすべてを 2 回、3 回チェックしましたが、ここからどこへ行くべきかわかりません。どんな助けでも大歓迎です!