Geheimnisvolles Byte nach TLS-Paket
Ich versuche, eine SSL-TCP-Verbindung von Java zu einem Vala-Server herzustellen. Alles funktioniert einwandfrei, bis ich ein zweites Paket an den Server schicke. (Auch das erste Paket sendet gut). Der Server empfängt nur das erste Byte (in diesem Fall die "1") des zweiten Pakets, sonst nichts, aber wenn ich ohne SSL eine Verbindung zum Server herstelle, funktioniert alles einwandfrei. Ich denke, dass der Server nicht das Problem ist, da jede andere Verbindung von einem anderen Vala-Client ziemlich gut funktioniert.
Ich verwende ein nicht vertrauenswürdiges Zertifikat, habe daher einen benutzerdefinierten TrustManager erstellt und verwende OpenJDK 7 (Elementary OS - Linux). Hier ist mein Code:
//Main:
SSLHandler handler = new SSLHandler();
handler.createSecureSocket("localhost", 7431);
byte[] data = {1,4,1,1,1,1};
handler.getOutputStream().write(data);
handler.getOutputStream().write(data);
// SSLHandler
public class SSLHandler {
// SSL Socket erstellen
SSLSocket sslSocket;
public void createSecureSocket(String ip, int port) throws UnknownHostException, IOException, KeyManagementException, NoSuchAlgorithmException {
SSLSocketFactory factory = (SSLSocketFactory) new DefaultTrustManager().createSSLFactory("TLS");
sslSocket = (SSLSocket) factory.createSocket(ip, port);
}
public OutputStream getOutputStream() throws IOException {
return sslSocket.getOutputStream();
}
public InputStream getInputStream() throws IOException {
return sslSocket.getInputStream();
}
}
//Custom Trust Manager
public class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public SSLSocketFactory createSSLFactory(String protocol) throws NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = SSLContext.getInstance(protocol);
TrustManager[] byPassTrustManager = new TrustManager[] {this};
sslContext.init(null, byPassTrustManager, new SecureRandom());
return sslContext.getSocketFactory();
}
}
Weiß jemand eine Lösung für dieses Problem?