2016-08-19 4 views
-1
Socket fromServer = new Socket("host", 443); 

    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
    SSLSocket sslsocket = (SSLSocket) factory.createSocket(fromServer, null, true); 
    sslsocket.setUseClientMode(true); 

ich versuche es, aber bekommen "javax.net.ssl.SSLException: Schwerwiegender Alarm empfangen: INTERNAL_ERROR"Wie in SSLSocket vor dem Handshake schreiben?

Wenn ich SSLSocket verwenden, um direkt damit arbeiten (factory.createSocket ("host", 443);)

add: ich brauche benutzerdefinierte Header, bevor Handshake hinzufügen, für implementieren eigenes Protokoll

add2: -Code funktioniert! it my fail, ich teste auf Server mit SNI

+0

Was möchten Sie erreichen? – Fildor

+0

Fildor, benutzerdefinierte Header für benutzerdefinierte Protokoll hinzufügen – inter

+0

Hier klicken: http://blog.trifork.com/2009/11/10/securing-connections-with-tls/ – Fildor

Antwort

3

Ein SSLSocket überträgt Daten innerhalb einer TLS-Verbindung. Eine TLS-Verbindung muss eingerichtet werden, bevor Daten übertragen werden können, d. H. Der Handshake muss erfolgreich abgeschlossen sein. Daher ist es nicht sinnvoll, in einen SSLSocket zu schreiben, bevor der Handshake genauso ausgeführt wurde, wie es nicht sinnvoll ist, in einen TCP-Socket zu schreiben, bevor die TCP-Verbindung hergestellt wurde.

add: Ich brauche benutzerdefinierte Header, bevor Handshake hinzufügen, für implementieren eigenes Protokoll

Nachdem diese Informationen der Frage sinnvoller ist, hinzugefügt wurden. Es sieht so aus, als ob Sie zuerst unverschlüsselte Daten austauschen und dann später auf TLS aktualisieren möchten, wie zum Beispiel in SMTP + STARTTLS. In diesem Fall müssen Sie zunächst eine normale TCP-Verbindung herstellen und diese später auf TLS aufrüsten. Siehe Is it possible to change plain socket to SSLSocket? für den letzten Teil.

+0

ich weiß es. Ich muss benutzerdefinierte Header VOR dem Handshake hinzufügen, für das benutzerdefinierte Protokoll implementieren – inter

+0

Nun macht es Sinn, wenn Ihr Protokoll für sichere ** und ** unsichere Kommunikation ermöglicht. Wenn Sie beide über denselben Port abwickeln wollen, können Sie nackt starten und sobald beide Parteien sich auf die Verwendung von SSL/TLS geeinigt haben, können sie startTLS starten. Ein Beispiel wäre SMTP ... – Fildor

+0

Fildor, das ist richtig – inter

Verwandte Themen