Hi,
I’‘ve discovered yet another severe race condition in Smack. I’'ve enabled TLS connections in the library, but used an expired certificate and enabled strict checking.
Of course, this causes an exception:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: target verification failed of jabber.monitzer.com, OU=Unknown, O=Andreas Monitzer, L=Vienna, ST=Vienna, C=AT
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1476)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshake r.java:847)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.j ava:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:815)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImp l.java:1025)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:10 38)
at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:11 21)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:327)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:63)
Caused by: java.security.cert.CertificateException: target verification failed of jabber.monitzer.com, OU=Unknown, O=Andreas Monitzer, L=Vienna, ST=Vienna, C=AT
at org.jivesoftware.smack.ServerTrustManager.checkServerTrusted(ServerTrustManager .java:143)
at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContext Impl.java:320)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshake r.java:840)
… 10 more
/code
This would be fine, but there’‘s is no[/b] way to catch that exception in my code. The connection listener would get notice of it, but since this happpens in the constructor of XMPPConnection, there’'s no way I could add one before that.