This week's book giveaway is in the Servlets forum.
We're giving away four copies of Murach's Java Servlets and JSP and have Joel Murach on-line!
See this thread for details.
The moose likes Sockets and Internet Protocols and the fly likes JSSE Client authentication problem Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Murach's Java Servlets and JSP this week in the Servlets forum!
JavaRanch » Java Forums » Java » Sockets and Internet Protocols
Bookmark "JSSE Client authentication problem" Watch "JSSE Client authentication problem" New topic
Author

JSSE Client authentication problem

leor amikam
Greenhorn

Joined: Oct 22, 2009
Posts: 2
Hello,

I am a total SSL newbie. I have to connect to a 3rd party app via a SSL/TCP connection (not https). They vendor provided example code that works under C#. I need to emulate the same connection method, but in Java. The C# code looks something like this:

client = new TcpClient(hostName, int.Parse(clientPort));
sslStream = new SslStream(client.GetStream(), ...);
sslStream.AuthenticateAsClient(serverName);

So, I am provided with only three input parameters - host name, port, and a "server name". It appears that the .net runtime function, AuthenticateAsClient, lets you authenticate the connection with just the service name (not sure if that is the correct designation). There is no certificate of any kind on the client machine that is connection to the SSL server. Although I have found many SSL/Java examples on the web, I don't know what the construct/function calls would be in a Java environment to emulate the behavior of this AuthenticateAsClient function. Any help ig greately appreciated.

Here's some more detail. I looked at the JSSE tutorial.

OK, I looked at the tutorials, and am still missing some key bit of knowledge. Here is my example code:

SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket sslsocket = (SSLSocket)sslsocketfactory.createSocket("usatl-w-100624", 11000);
InputStream inputstream = System.in;
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader in = new BufferedReader(inputstreamreader);
OutputStream outputstream = sslsocket.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(outputstream);

sslsocket.startHandshake();

On the call to startHandshake(), I get this error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Of couse, this is expected, as I do not have a certificate in the java keystore. If I look at the JSSE examples, here: http://docs.oracle.com/javase/1.4.2/docs/guide/security/jsse/samples/index.html
The SSLSocketClientWithClientAuth.java example looked relevant. However, it also is requesting a file path. My C# example does not access any file on the client. So, how do you do the equivalent in Java?


Thanks,Leor


 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
 
subject: JSSE Client authentication problem
 
Similar Threads
regarding https connectivity
HTTP Post SSL certificates (Jakarta HTTP Commons)
javax.net.ssl.SSLException: No available certificate or key corresponds to the SSL ci
SSL Server and Client Communication
SSL enabled client code with client authentication