Got a SSLSocketFactory cipher puzzle for you

That is if you're interested.

Am working on a .NET application that passes text streams back and forth with this Java server.  The Java server uses SSLSocketFactory along with the DH_anon_* cipher suites to handle encryption.  Right now, the .NET Framework does not even have the capabilities to connect to that Java server using the ciphers above...nor do I think it can handle anything.  I tried...  That really shows the maturity level of Java when compared to .NET! (I think that wasn't introduced in Java until v1.4.2, a couple of years ago)

So let's talk in code!  I need to create a socket server using SSLSocketFactory for testing.  Came across the KnockKnockServer example.  Javac'ed (compiled) the application and ran it on my machine using port 4444.  Ran the client java code against the server and that works.

My iteration of the Socket Server/Client using the SSLSocketFactory may be found at

Now, how may I get .NET to read/understand the Java socket server?  I even tried the Mono.Security library to no avail.  Many pricey third-party apps that I have found do not even handle this.  Nothing works except for IKVM which works like a charm, however the DLL itself is 26MB and am not sure if it is worth 26MB for just a couple of lines of code?  I just want to find a lightweight library or a workaround entirely in .NET.

the Java Server code in a nutshell:

        SSLServerSocketFactory factory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
        SSLServerSocket serverSocket = null;
        try {
            serverSocket = (SSLServerSocket)factory.createServerSocket(4444);

        } catch (Exception e) {
            System.err.println("Could not listen on port: 4444.");
        String[] dcsList = factory.getDefaultCipherSuites();
         System.out.println("   Default cipher suites:");
         for (int i=0; i            System.out.println("      "+dcsList[i]);
        String[] suites = serverSocket.getSupportedCipherSuites();
        SSLSocket clientSocket = null;
        try {
            clientSocket = (SSLSocket)serverSocket.accept();           
        } catch (Exception e) {
            System.err.println("Accept failed.");

The .NET client side code ATTEMPT:

            const int bufSize = 4096;
            byte[] buf = new byte[bufSize];

            System.Net.Sockets.TcpClient _client = new System.Net.Sockets.TcpClient("localhost", 4444);
            Mono.Security.Protocol.Tls.SslClientStream scs = new Mono.Security.Protocol.Tls.SslClientStream(_client.GetStream(), "localhost", true, Mono.Security.Protocol.Tls.SecurityProtocolType.Tls);
            if (_client.Connected)
            int x = scs.Read(buf, 0, bufSize);
            string s = Encoding.UTF8.GetString(buf, 0, x);

At the .NET "int x..." it kept throwing "The authentication or decryption has failed." And the Java server threw "Exception in thread "main" no cipher suites
in common ... "

My goal is to have .NET connect to the server and read the "Knock, knock" response.

Any ideas?

Edit 12/2/08:

Settled for a Rebex.Net.SecureSocket Library.  Rebex didn't have what I needed BUT their programmer, Lukas Pokorny, agreed to make it work in exchange for me purchasing one of their libraries.  I strongly encourage you to buy their libraries as their support is excellent!