[Mono-bugs] [Bug 602659] New: SslStream.AuthenticateAsServer incompatibility with .NET

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed May 5 02:52:43 EDT 2010



           Summary: SslStream.AuthenticateAsServer incompatibility with
    Classification: Mono
           Product: Mono: Class Libraries
           Version: 2.4.x AddOn CD
          Platform: x86-64
        OS/Version: SLES 11
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: System
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: maciej.paszta at secpl.cs.put.poznan.pl
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:
Gecko/20100401 Firefox/3.6.3

When calling AuthenticateAsServer on SslStream, call hangs and no callback is
made on the client side to validate server's certificate. 

Reproducible: Always

Steps to Reproduce:
1. Setup server side of SslStream
2. Setup client's cert validation callback to alway return true
3. Call AuthenticateAsServer
4. Setup client side of SslStream and connect to previously prepared server
5. Setup callback to provide server with client certificate and callback for
server's cert validation.
6. Call AuthenticateAsClient... wait for the server's cert validation to be
called on the client side and wait for the exit from AuthenticateAsServer
method on the server side.
Actual Results:  
Server hangs and the code never exits from AuthenticateAsServer

Expected Results:  
Server's certificate validation callback should be called on the client side,
and server's code should exit from call to AuthenticateAsServer().

The code works as expected on .NET Framework. The code was tested on both Mono
2.4 (Mono Extensions) and on Mono 2.6 from openSuse's Build Service. After
examining the code in:


It appears that after the call to BeginAuthenticateAsServer server start
reading from the socket and, ineed, when I call:

m_sslClient.Write(new byte[] { 0 });

on the client side, authentication process finishes at both the client and the
server side, this works differently to the SslStream implementiation in .NET.
When change is made to SslStream.cs to start writing in
BeginAuthenticateAsServer() that is 

return BeginRead (new byte [0], 0, 0, callback, asyncState);

is changed to

return BeginWrite (new byte [0], 0, 0, callback, asyncState);

The code starts working as expected.

Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list