Hmm.. a short night's sleep seems to have changed the mood of my devices
somehow. Now they connect to https://www.google.com with my code
(unchanged).
But it's still a nogo for my internal service. The internal service provides
an actual web interface (automated help provided by WCF), which is
accessible from the phone's browser (after the usual certificate warning),
so I suppose WCF services do something different in connection establishment
that mono cannot handle.

Since I cannot make the internal service publicly accessible, I wonder what
would help trace down the problem.

I went ahead installed mono 4 windows and created a simple program. After
the usual "hey, this works with Microsoft.Net but won't even compile in
Xamarin Studio" confusion, I came up with this (see end of mail). It works
if I run it with Microsoft.Net, and it throws a pretty similar error (see
very end of mail) running it with Mono, thus confirming that the problem
lies indeed with Mono's handling of the encrypted request.

I guess I have no choice but to write a repro server project (which has to
be run on windows running microsoft's .net runtime)

Regards
Stephan

public static void Main (string[] args)
                {
                        Console.WriteLine ("Hello World!");
                        ServicePointManager.ServerCertificateValidationCallback 
+=
validatedCertificate;

                        string address = 
@"https://wsklo2059.ch.nextiraone-eu.ned:8090/IsAlive";;
                        Console.WriteLine("Sending request to " + address);

                        HttpWebRequest req = WebRequest.Create(new 
Uri(address)) as
HttpWebRequest;
                        //req.Address = new Uri(address)
                        //HttpWebRequest req = new HttpWebRequest(new 
Uri(address));
                        WebResponse res = req.GetResponse();
                        Console.WriteLine("Response received");

                }

                private static bool validatedCertificate(object sender, 
X509Certificate
certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
                {
                        Console.WriteLine("validate cert called for " + 
certificate.Subject);
                        return true;
                }

And the error (validatedCertificate is never fired):

Unhandled Exception: System.Net.WebException: Error getting response stream
(Wri
te: BeginWrite failure): SendFailure ---> System.IO.IOException: BeginWrite
fail
ure
  at System.Net.Sockets.NetworkStream.BeginWrite (System.Byte[] buffer,
Int32 of
fset, Int32 size, System.AsyncCallback callback, System.Object state)
[0x0007c]
in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\System\System.Net.S
ockets\NetworkStream.cs:258
  at Mono.Security.Protocol.Tls.RecordProtocol.BeginSendRecord (ContentType
cont
entType, System.Byte[] recordData, System.AsyncCallback callback,
System.Object
state) [0x00026] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\Mo
no.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:706
  at Mono.Security.Protocol.Tls.RecordProtocol.SendRecord (ContentType
contentTy
pe, System.Byte[] recordData) [0x00000] in
C:\cygwin\tmp\monobuild\build\BUILD\m
ono-2.10.9\mcs\class\Mono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:
727
  at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert
(Mono.Security.Protocol
.Tls.Alert alert) [0x00027] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\m
cs\class\Mono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:625
  at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (AlertDescription
descr
iption) [0x00000] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\M
ono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:596
  at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback
(IAsyncResu
lt asyncResult) [0x00037] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs
\class\Mono.Security\Mono.Security.Protocol.Tls\SslStreamBase.cs:104
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
[0x0006
c] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\System\System.Ne
t\HttpWebRequest.cs:831
  at System.Net.HttpWebRequest.GetResponse () [0x0000e] in
C:\cygwin\tmp\monobui
ld\build\BUILD\mono-2.10.9\mcs\class\System\System.Net\HttpWebRequest.cs:836
  at MonoHttpWebRequest.MainClass.Main (System.String[] args) [0x00000] in
<file
name unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Net.WebException: Error getting
respon
se stream (Write: BeginWrite failure): SendFailure --->
System.IO.IOException: B
eginWrite failure
  at System.Net.Sockets.NetworkStream.BeginWrite (System.Byte[] buffer,
Int32 of
fset, Int32 size, System.AsyncCallback callback, System.Object state)
[0x0007c]
in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\System\System.Net.S
ockets\NetworkStream.cs:258
  at Mono.Security.Protocol.Tls.RecordProtocol.BeginSendRecord (ContentType
cont
entType, System.Byte[] recordData, System.AsyncCallback callback,
System.Object
state) [0x00026] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\Mo
no.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:706
  at Mono.Security.Protocol.Tls.RecordProtocol.SendRecord (ContentType
contentTy
pe, System.Byte[] recordData) [0x00000] in
C:\cygwin\tmp\monobuild\build\BUILD\m
ono-2.10.9\mcs\class\Mono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:
727
  at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert
(Mono.Security.Protocol
.Tls.Alert alert) [0x00027] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\m
cs\class\Mono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:625
  at Mono.Security.Protocol.Tls.RecordProtocol.SendAlert (AlertDescription
descr
iption) [0x00000] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\M
ono.Security\Mono.Security.Protocol.Tls\RecordProtocol.cs:596
  at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback
(IAsyncResu
lt asyncResult) [0x00037] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs
\class\Mono.Security\Mono.Security.Protocol.Tls\SslStreamBase.cs:104
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult)
[0x0006
c] in
C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.9\mcs\class\System\System.Ne
t\HttpWebRequest.cs:831
  at System.Net.HttpWebRequest.GetResponse () [0x0000e] in
C:\cygwin\tmp\monobui
ld\build\BUILD\mono-2.10.9\mcs\class\System\System.Net\HttpWebRequest.cs:836
  at MonoHttpWebRequest.MainClass.Main (System.String[] args) [0x00000] in
<file
name unknown>:0



--
View this message in context: 
http://mono-for-android.1047100.n5.nabble.com/handling-webservices-with-self-signed-certificates-tp5713085p5713099.html
Sent from the Mono for Android mailing list archive at Nabble.com.
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to