Hi
I am implementing 2way SSL over https on tamcat server through .Net
client (C# code as given below)
When iam validating server certificate,it's througing error like SSPI
failed while executing following method.
sslStream.AuthenticateAsClient(serverName,clientCertificatecollection,Ss
lProtocols.Ssl3,true);
Please suggest me....
using System;
using System.Collections;
using System.Net;
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Authentication;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.IO;
namespace SSLClient
{
class Program
{
private static Hashtable certificateErrors = new Hashtable();
// The following method is invoked by the
RemoteCertificateValidationDelegate.
public static bool ValidateServerCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
SslPolicyErrors errors = sslPolicyErrors;
if (errors != SslPolicyErrors.None)
{
Console.WriteLine("Certificate error: {0} ", errors);
}
if (((errors & SslPolicyErrors.RemoteCertificateChainErrors) ==
SslPolicyErrors.RemoteCertificateChainErrors))
{
//Console.WriteLine("Certificate error: {0} Certificate chain empty.
Self signed certificate? butstill continued");
errors -= SslPolicyErrors.RemoteCertificateChainErrors;
}
if (((errors & SslPolicyErrors.RemoteCertificateNameMismatch) ==
SslPolicyErrors.RemoteCertificateNameMismatch))
{
errors -= SslPolicyErrors.RemoteCertificateNameMismatch;
}
if (errors == SslPolicyErrors.None)
return true;
Console.WriteLine("Certificate error: {0}", sslPolicyErrors);
// Do not allow this client to communicate with unauthenticated servers.
return false;
}
public static void RunClient(string machineName, string serverName)
{
// Create a TCP/IP client socket.
// machineName is the host running the server application.
TcpClient client = new TcpClient(machineName, 8443);
Console.WriteLine("Client connected.");
// Create an SSL stream that will close the client's stream.
SslStream sslStream = new SslStream(
client.GetStream(),
false,
new RemoteCertificateValidationCallback(ValidateServerCertificate),
null
);
// The server name must match the name on the server certificate.
try
{
//X509Certificate clientCertificate;
X509CertificateCollection clientCertificatecollection = new
X509CertificateCollection();
X509Certificate clientCertificate =
X509Certificate.CreateFromCertFile(@"C:\project_securent\securent\lib\ap
ache-tomcat-5.5.17\ajay.cer");
clientCertificatecollection.Add(clientCertificate);
clientCertificatecollection.Add(clientCertificate);
sslStream.AuthenticateAsClient(serverName,clientCertificatecollection,Ss
lProtocols.Ssl3,true);
Console.WriteLine("hi");
}
catch (AuthenticationException e)
{
Console.WriteLine("Exception: {0}", e.Message);
if (e.InnerException != null)
{
Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
}
Console.WriteLine("Authentication failed - closing the connection.");
client.Close();
return;
}
// Encode a test message into a byte array.
// Signal the end of the message using the "<EOF>".
byte[] messsage = Encoding.UTF8.GetBytes("Hello from the client.<EOF>");
// Send hello message to the server.
sslStream.Write(messsage);
sslStream.Flush();
// Read message from the server.
string serverMessage = ReadMessage(sslStream);
Console.WriteLine("Server says: {0}", serverMessage);
// Close the client connection.
client.Close();
Console.WriteLine("Client closed.");
}
static string ReadMessage(SslStream sslStream)
{
// Read the message sent by the server.
// The end of the message is signaled using the
// "<EOF>" marker.
byte[] buffer = new byte[2048];
StringBuilder messageData = new StringBuilder();
int bytes = -1;
do
{
bytes = sslStream.Read(buffer, 0, buffer.Length);
// Use Decoder class to convert from bytes to UTF8
// in case a character spans two buffers.
Decoder decoder = Encoding.UTF8.GetDecoder();
char[] chars = new char[decoder.GetCharCount(buffer, 0, bytes)];
decoder.GetChars(buffer, 0, bytes, chars, 0);
messageData.Append(chars);
// Check for EOF.
if (messageData.ToString().IndexOf("<EOF>") != -1)
{
break;
}
} while (bytes != 0);
return messageData.ToString();
}
private static void DisplayUsage()
{
Console.WriteLine("To start the client specify:");
Console.WriteLine("clientSync machineName [serverName]");
Environment.Exit(1);
}
public static int Main(string[] args)
{
string serverCertificateName = "server.cer";
string machineName = "localhost";
Program.RunClient(machineName, serverCertificateName);
return 0;
}
}
}
-----Original Message-----
From: Martin Gainty [mailto:[EMAIL PROTECTED]
Sent: Tuesday, November 18, 2008 10:35 PM
To: Tomcat Users List
Subject: RE: Servlets / JSP can't connect to MySQL in Ubuntu Server
Andre
If not otherwise specified 3306 is the default port for mysql check to
see if its occupied with netstat -a | grep 3306 If it is reconfig your
port in my.conf to an available port
Martin Gainty
______________________________________________
Disclaimer and confidentiality note
Everything in this e-mail and any attachments relates to the official
business of Sender. This transmission is of a confidential nature and
Sender does not endorse distribution to any party other than intended
recipient. Sender does not necessarily endorse content contained within
this transmission.
> Date: Tue, 18 Nov 2008 13:37:49 +0100
> From: [EMAIL PROTECTED]
> To: [email protected]
> Subject: Re: Servlets / JSP can't connect to MySQL in Ubuntu Server
>
> Krapacs Ambrose wrote:
> > I have tried many different configurations and I have been unable to
> > get my Servlets / JSP to connect to MySQL server running. I am
> > trying to get this set up on my main server which is running Ubuntu
> > 8.10 Server with MySQL 5 and Tomcat6. I also tried setting up a
> > Ubuntu 8.04 server with Tomcat 5.5 and MySQL 5. I have even
> > configured Tomcat running on the 8.10 server to try to connect to
> > MySQL running on the 8.04 server. Still no luck!
> >
> > The exception that is thrown is here:
> > com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
> > Communications link failure
> Hi.
> I know little about MySQL and JDBC, but the above seems to be purely
> at the TCP/IP level : your JDBC driver cannot connect to your MySQL
server.
>
> It seems from the above that you are connecting to "localhost" without
> indicating a port. I thus suppose that JDBC is going to try the
> "standard port" on which MySQL is supposed to be listening.
> 1) So first of all, is that the case ? Is MySQL really listening on
> that port ? (and first of all, is MySQL started ?) (Try "netstat -n |
> grep LISTEN" to see all ports being listened on)
>
> 2) are your Tomcat and your MySQL server on the same system ? (since
> you're trying to connect to "localhost")
>
> 3) if yes, on that system, when you try "ping localhost", what does it
> show you ?
>
> 4) finally, on the same system, try "telnet localhost xxxx", where
> xxxx is the port where MySQL is supposedly listening. What do you see
then ?
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: [email protected] To unsubscribe,
> e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
_________________________________________________________________
Access your email online and on the go with Windows Live Hotmail.
http://windowslive.com/Explore/Hotmail?ocid=TXT_TAGLM_WL_hotmail_acq_acc
ess_112008
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]