Newbie sasl/ssl exceptions

Hi,

I’‘ve started using smack and have a problem logging into my own wildfire server and jabber.org. This seems like a simpe procedure, but I can’'t get it to work, which is strange. The code is really simple:

ConnectionConfiguration cc = new ConnectionConfiguration(server, port);
cc.setTLSEnabled(true);
cc.setSASLAuthenticationEnabled(true);
XMPPConnection conn = new XMPPConnection(cc);
conn.login(username, password);

The exception this generates with a valid username, password and the port set to 5222 is:

java.net.SocketException: Socket closed
[java]     at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99)
[java]     at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
[java]     at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(StreamEncoder.java:336)
[java]     at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(StreamEncoder.java:404)
[java]     at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(StreamEncoder.java:408)
[java]     at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:152)
[java]     at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
[java]     at java.io.BufferedWriter.flush(BufferedWriter.java:236)
[java]     at org.jivesoftware.smack.util.ObservableWriter.flush(ObservableWriter.java:48)
[java]     at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:260)
[java]     at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:39)
[java]     at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:79)
[java] javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
[java]     at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:501)
[java]     at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:343)
[java]     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:720)
[java]     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1025)
[java]     at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1038)
[java]     at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:1119)
[java]     at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:316)
[java]     at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
[java]     at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:65)
[java] No response from the server.: [java]     at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:58)
[java]     at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:437)
[java]     at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:396)
[java]     at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:377)
[java]     at example.Client.<init>(Client.java:72)
[java]     at example.Client.main(Client.java:172)
[java] Aug 16, 2006 6:04:10 PM example.Client <init>
[java] SEVERE: No response from the server.

Which is strange as: 1) I’‘m not using SSL, though the stack trace mentions `Unrecognized SSL message, plaintext connection?’’. 2) In wildfire, how do I determine if SASL is on/off? (i.e. should ConnectionConfiguration.setSASLAuthenticationEnabled() be true or false?

As I’‘ve said, I’'ve tried this against my wildfire server and jabber.org, with the same stack trace each time.

Thanks for any help anyone can give. This seems basic stuff.

Michael.

Oh, I forgot to add I’'ve tried the ConnectionConfiguration with setSASLAuthenticationEnabled(false) too, and I get excactly the same exception.

Thanks again,

Michael.

Hey Michael,

I don’‘t know which Smack and Wildfire versions you are using. Could you try using the latest Smack and Wildfire nightly build versions? BTW, the SSL error you are getting it’'s because you are trying to secure the socket with TLS. TLS was the new name assigned to SSL. The problem seems to happen while negotiating TLS.

Regards,

– Gato

Hi Gato,

Thanks for the reply. For the record, I got these exceptions using Wildfire 3.0.1 and Smack 2.2.1. I’'ll try using the nightly builds and post back.

Michael.

Hi Gato,

I’'ve downloaded the 2006_08_17 nightly build of wildfire and am testing it with gaim 1.3.1-0.

I can create a user on the server and log into in ok. However, when I try and register a new user inband with gaim, with the ‘‘use TLS if available’’ option on the server I get the stack trace:

2006.08.17 10:59:15 SSL Connect 5e9db7[SSL_NULL_WITH_NULL_NULL: Socket[addr=/xxx.xxx.xxx.xxx,port=32998,localport=5223]]

2006.08.17 10:59:15 Error creating session

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:5 25)

at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:723)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImp l.java:1030)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:67 8)

at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)

at org.jivesoftware.wildfire.net.ServerTrafficCounter$InputStreamWrapper.read(Serv erTrafficCounter.java:183)

at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)

at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)

at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)

at java.io.InputStreamReader.read(InputStreamReader.java:167)

at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2992)

at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1410)

at org.jivesoftware.wildfire.net.MXParser.nextImpl(MXParser.java:331)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.wildfire.net.SocketReader.createSession(SocketReader.java:435)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 53)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

/code

But, If I set gaim to ‘‘use TLS if available’’ and ‘‘Force old SSL’’ the registration works fine. Is this the behaviour you expect?

Testing smack-dev-2006_08_17 against the wildfire server above, with the same code as before (port 5223, ConnectionConfiguration with TLS on, SASL on) I get the client stack trace:

org.xmlpull.v1.XmlPullParserException: only whitespace content allowed before start tag and not \u15 (position: START_DOCUMENT seen \u15… @1:1)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1519)

at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:371)

at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)

at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:65)

Connection failed. No response from server.:

at org.jivesoftware.smack.PacketReader.startup(PacketReader.java:168)

at org.jivesoftware.smack.XMPPConnection.init(XMPPConnection.java:863)

at org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection. java:300)

at org.jivesoftware.smack.XMPPConnection.(XMPPConnection.java:258)

at example.Client.main(Client.java:22)

/code

in the server’'s debug log I get the stack trace:

2006.08.17 11:48:50 SSL Connect 1a2da17[SSL_NULL_WITH_NULL_NULL: Socket[addr=/xxx.xxx.xxx.xxx,port=33062,localport=5223]]

2006.08.17 11:48:50 Error creating session

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(InputRecord.java:5 25)

at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:355)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:723)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImp l.java:1030)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:67 8)

at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)

at org.jivesoftware.wildfire.net.ServerTrafficCounter$InputStreamWrapper.read(Serv erTrafficCounter.java:183)

at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)

at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)

at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)

at java.io.InputStreamReader.read(InputStreamReader.java:167)

at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2992)

at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)

at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1410)

at org.jivesoftware.wildfire.net.MXParser.nextImpl(MXParser.java:331)

at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)

at org.jivesoftware.wildfire.net.SocketReader.createSession(SocketReader.java:435)

at org.jivesoftware.wildfire.net.BlockingReadingMode.run(BlockingReadingMode.java: 53)

at org.jivesoftware.wildfire.net.SocketReader.run(SocketReader.java:123)

at java.lang.Thread.run(Thread.java:595)

/code

This all looks a bit broken and smack doesn’'t seem to be sending the right xml… on the server side it looks like a problem negotiation ssl/tls. Is there anything I have to setup further on the server other than turning this on?

Can you confirm that I’‘m doing this ok, as this seems basic stuff which doesn’'t seem to work…

Thanks for your help Gato,

Michael.