Hi Leute,
ich schreibe momentan an einem Test-Client für XMPP in Java. Es geht darum, den XMPP-Server openFire zu fuzzen. Mehr dazu in diesem Thread.
Folgender Code ist erstmal sehr primitiv, da ich erstmal versuche, das Protokoll nachzuvollziehen. Ich hoffe ihr seht mir das nach.
Nach dem ersten Request kommen also die unterstützten Mechanismen. Sobald ich aber versuche, die SSL-Verbindung aufzubauen, kommt keine Antwort mehr vom Server.
Was ich bisher herausfinden konnte: Anscheinend liegt es daran, dass das Zertifikat meines Servers von mir selbst signiert ist. Es wurde automatisch bei der Installation von openFire generiert. Ich hab also nach einer Anleitung alle Zertifikate (nur für Tests - keine Angst :wink akzeptiert. Allerdings wird in dieser Anleitung von HTTPS ausgegangen.
Meine Fragen:
1. Wie kann ich alle Zertifikate (egal welche TCP-Verbindung) akzeptieren?
2. Stimmt meine SSL-Wrapper-Implementierung so?
Ich hoffe, ich hab nichts vergessen. Danke schonmal für die Mühe
Viele Grüße
Tom
ich schreibe momentan an einem Test-Client für XMPP in Java. Es geht darum, den XMPP-Server openFire zu fuzzen. Mehr dazu in diesem Thread.
Folgender Code ist erstmal sehr primitiv, da ich erstmal versuche, das Protokoll nachzuvollziehen. Ich hoffe ihr seht mir das nach.
Code:
String host = "192.168.60.164";
int port = 5222;
Socket socket = new Socket(host, port);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
InputStreamReader reader = new InputStreamReader(socket.getInputStream());
String header = "<stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='localhost' xmlns:xml='http://www.w3.org/XML/1998/namespace'>";
// ############################################################################################################################################
// STARTTLS-REQUEST
StringBuilder msg = new StringBuilder();
msg.append(header + "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>");
writer.write(msg.toString());
writer.flush();
System.out.println("-> " + msg.toString());
// Wait for Response
Thread.sleep(500);
// Response
int rec;
System.out.print("<- ");
while(reader.ready()) {
rec = reader.read();
System.out.print((char)rec);
}
System.out.println();
// ############################################################################################################################################
// WRAP SOCKET WITH SSL
SSLSocket sslSocket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(socket, host, port, true);
reader = new InputStreamReader(sslSocket.getInputStream());
OutputStream out = sslSocket.getOutputStream();
msg = new StringBuilder();
String username = "testuser1@localhost";
String password = "test";
String userPass = "\0" + username + "\0" + password;
String userPassBase64 = new BASE64Encoder().encode(userPass.getBytes());
msg.append(header + "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN'>" + userPassBase64 + "</auth>");
out.write(msg.toString().getBytes());
writer.flush();
System.out.println("-> " + msg.toString());
// Wait for Response
Thread.sleep(500);
// Response
System.out.print("<- ");
while(reader.ready()) {
rec = reader.read();
System.out.print((char)rec);
}
System.out.println();
-> <stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='localhost' xmlns:xml='http://www.w3.org/XML/1998/namespace'><starttls xmlns='urn:ietfarams:xml:ns:xmpp-tls'/>
<- <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="localhost" id="cecbddc2" xml:lang="en" version="1.0"><stream:features><starttls xmlns="urn:ietfarams:xml:ns:xmpp-tls"></starttls><mechanisms xmlns="urn:ietfarams:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/></stream:features><proceed xmlns="urn:ietfarams:xml:ns:xmpp-tls"/>
-> <stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='localhost' xmlns:xml='http://www.w3.org/XML/1998/namespace'><auth xmlns='urn:ietfarams:xml:ns:xmpp-sasl' mechanism='PLAIN'>AHRlc3R1c2VyMUBsb2NhbGhvc3QAdGVzdA==</auth>
<-
<- <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="localhost" id="cecbddc2" xml:lang="en" version="1.0"><stream:features><starttls xmlns="urn:ietfarams:xml:ns:xmpp-tls"></starttls><mechanisms xmlns="urn:ietfarams:xml:ns:xmpp-sasl"><mechanism>DIGEST-MD5</mechanism><mechanism>PLAIN</mechanism><mechanism>ANONYMOUS</mechanism><mechanism>CRAM-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth"/><register xmlns="http://jabber.org/features/iq-register"/></stream:features><proceed xmlns="urn:ietfarams:xml:ns:xmpp-tls"/>
-> <stream:stream version='1.0' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='localhost' xmlns:xml='http://www.w3.org/XML/1998/namespace'><auth xmlns='urn:ietfarams:xml:ns:xmpp-sasl' mechanism='PLAIN'>AHRlc3R1c2VyMUBsb2NhbGhvc3QAdGVzdA==</auth>
<-
Nach dem ersten Request kommen also die unterstützten Mechanismen. Sobald ich aber versuche, die SSL-Verbindung aufzubauen, kommt keine Antwort mehr vom Server.
Was ich bisher herausfinden konnte: Anscheinend liegt es daran, dass das Zertifikat meines Servers von mir selbst signiert ist. Es wurde automatisch bei der Installation von openFire generiert. Ich hab also nach einer Anleitung alle Zertifikate (nur für Tests - keine Angst :wink akzeptiert. Allerdings wird in dieser Anleitung von HTTPS ausgegangen.
Meine Fragen:
1. Wie kann ich alle Zertifikate (egal welche TCP-Verbindung) akzeptieren?
2. Stimmt meine SSL-Wrapper-Implementierung so?
Ich hoffe, ich hab nichts vergessen. Danke schonmal für die Mühe
Viele Grüße
Tom