Byte misterioso após o pacote TLS
Estou tentando criar uma conexão TCP SSL do Java para um servidor Vala. Tudo funciona bem até eu enviar um segundo pacote para o servidor. (também o primeiro pacote envia bem). O servidor recebe apenas o primeiro byte (neste caso, o "1") do segundo pacote, nada mais, mas se eu me conectar ao servidor sem SSL, tudo funcionará bem. Eu acho que o servidor não é o problema, porque todas as outras conexões de outro cliente Vala funcionam muito bem.
Estou usando um certificado não confiável, então criei um TrustManager personalizado e estou usando o OpenJDK 7 (OS elementar - Linux). Aqui está o meu código:
//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();
}
}
Alguém conhece uma solução para este problema?