Das ist nicht ganz so einfach. AVM hat mir geraten, die Cipher-Suites einzuschränken.
Aber letzlich hat es gereicht, die Reihenfolge der Cipher zu verändern. An erster Stelle steht jetzt "ECDHE-RSA-AES128-SHA".
handshake failed FB7170
Moderator: almisoft
Re: handshake failed FB7170
Alexander Miehlke
http://www.almisoft.de
http://www.boxtogo.de
http://www.surflog.net
E-Mail: info@almisoft.de
Tel. 030-70206375
http://www.almisoft.de
http://www.boxtogo.de
http://www.surflog.net
E-Mail: info@almisoft.de
Tel. 030-70206375
Re: handshake failed FB7170
VIELEN, VIELEN DANK !!!!!!
mein Code ( in dem ich versuchsweise auch die Suites versucht habe zu manipulieren... ) aber letztlich erfolglos wieder kommentiert hatte ...
mSSLSocketFactory = mSSLContext.getSocketFactory();
networkSocket = (SSLSocket)mSSLSocketFactory.createSocket(networkSocket, mHost, mPort, true);
// test 2015-10-07
// http://just-another-blog.net/programmin ... ient-auth/
//SSLSocket sslSocket = (SSLSocket) networkSocket;
//((SSLSocket)networkSocket).setEnabledProtocols(new String[] {"TLSv1"});
//((SSLSocket)networkSocket).setEnabledCipherSuites(new String[]{});
((javax.net.ssl.SSLSocket)networkSocket).addHandshakeCompletedListener(new MyHandshakeListener());
((javax.net.ssl.SSLSocket)networkSocket).startHandshake();
networkSocket.getOutputStream().flush();
Gruß, Martin
PS: Im Moment hab ich kein Gerät bei dem der Fehler reproduzierbar ist, aber wenn dein Tip wirklich hilft ... muss ich mich wohl erkenntlich zeigen ! DANKE !
mein Code ( in dem ich versuchsweise auch die Suites versucht habe zu manipulieren... ) aber letztlich erfolglos wieder kommentiert hatte ...
mSSLSocketFactory = mSSLContext.getSocketFactory();
networkSocket = (SSLSocket)mSSLSocketFactory.createSocket(networkSocket, mHost, mPort, true);
// test 2015-10-07
// http://just-another-blog.net/programmin ... ient-auth/
//SSLSocket sslSocket = (SSLSocket) networkSocket;
//((SSLSocket)networkSocket).setEnabledProtocols(new String[] {"TLSv1"});
//((SSLSocket)networkSocket).setEnabledCipherSuites(new String[]{});
((javax.net.ssl.SSLSocket)networkSocket).addHandshakeCompletedListener(new MyHandshakeListener());
((javax.net.ssl.SSLSocket)networkSocket).startHandshake();
networkSocket.getOutputStream().flush();
Gruß, Martin
PS: Im Moment hab ich kein Gerät bei dem der Fehler reproduzierbar ist, aber wenn dein Tip wirklich hilft ... muss ich mich wohl erkenntlich zeigen ! DANKE !
Re: handshake failed FB7170
Du bist da an der richtigen Stelle. Siehe am besten http://stackoverflow.com/questions/1629 ... g-httpsurl
Alexander Miehlke
http://www.almisoft.de
http://www.boxtogo.de
http://www.surflog.net
E-Mail: info@almisoft.de
Tel. 030-70206375
http://www.almisoft.de
http://www.boxtogo.de
http://www.surflog.net
E-Mail: info@almisoft.de
Tel. 030-70206375
Re: handshake failed FB7170
SUPER !
Bei Verwendung eines problemfreien Gerätes wird mir im HandshakeCompleteListener ein anderer Cipher ( TLS_DHE_RSA_WITH_AES_256_CBC_SHA ) als verwendet angezeigt.
Von daher könnte es sein, ich muss diesen auch an erste Stelle setzen, dass weiß ich aber erst sicher, wenn ich so ein S6 ( oder anderes Problem-Gerät ) zum Test habe.
Wenn dem so ist, währe der Workaround evtl. "leicht" zertifikatsabhängig !
Danke, Martin
Bei Verwendung eines problemfreien Gerätes wird mir im HandshakeCompleteListener ein anderer Cipher ( TLS_DHE_RSA_WITH_AES_256_CBC_SHA ) als verwendet angezeigt.
Von daher könnte es sein, ich muss diesen auch an erste Stelle setzen, dass weiß ich aber erst sicher, wenn ich so ein S6 ( oder anderes Problem-Gerät ) zum Test habe.
Wenn dem so ist, währe der Workaround evtl. "leicht" zertifikatsabhängig !
Danke, Martin
Re: handshake failed FB7170
Hallo almisoft,
die Aussage von AVM, die Liste der Suiten einzuschränken war schon korrekt. Die Liste wird evtl. sequenziell vom Server untersucht, aber die Position der Suite in der Liste erzwingt nicht deren Verwendung.
Jedenfalls will ich das so ermittelt haben. In meinem Fall verbinde ich mich mit einem MySQL-Server und es können auch nur Suiten verwendet werden, die bei der Kompilierung dessen mit angegeben wurden.
In meinem Fall wurde bisher TLS_DHE_RSA_WITH_AES_256_CBC_SHA verwendet. TLS_DHE_RSA_WITH_AES_128_CBC_SHA ginge auch. Bei Verwendung dieser beiden Suiten tritt definitiv der Protokollfehler auf.
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA und TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA werden nicht unterstütz vom Server also musste ich ausweichen auf TLS_RSA_WITH_AES_128_CBC_SHA oder SSL_RSA_WITH_RC4_128_SHA.
Den Code von Stackoverflow habe ich erweitert in eine forbiddenSuitesList und preferedSuitesList. Die Methode sieht dann wie folgt aus:
Wobei auf das Remove/Add der "preferedSuitesList" verzichtet werden kann und es dennoch funktioniert.
die Aussage von AVM, die Liste der Suiten einzuschränken war schon korrekt. Die Liste wird evtl. sequenziell vom Server untersucht, aber die Position der Suite in der Liste erzwingt nicht deren Verwendung.
Jedenfalls will ich das so ermittelt haben. In meinem Fall verbinde ich mich mit einem MySQL-Server und es können auch nur Suiten verwendet werden, die bei der Kompilierung dessen mit angegeben wurden.
In meinem Fall wurde bisher TLS_DHE_RSA_WITH_AES_256_CBC_SHA verwendet. TLS_DHE_RSA_WITH_AES_128_CBC_SHA ginge auch. Bei Verwendung dieser beiden Suiten tritt definitiv der Protokollfehler auf.
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA und TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA werden nicht unterstütz vom Server also musste ich ausweichen auf TLS_RSA_WITH_AES_128_CBC_SHA oder SSL_RSA_WITH_RC4_128_SHA.
Den Code von Stackoverflow habe ich erweitert in eine forbiddenSuitesList und preferedSuitesList. Die Methode sieht dann wie folgt aus:
Code: Alles auswählen
private static String[] setupPreferredSupportedCipherSuites(SSLSocketFactory sslSocketFactory) {
String[] supportedCipherSuites = sslSocketFactory.getSupportedCipherSuites();
ArrayList<String> suitesList = new ArrayList<String>(Arrays.asList(supportedCipherSuites));
suitesList.removeAll(forbiddenSuitesList);
suitesList.removeAll(preferedSuitesList);
suitesList.addAll(0, preferedSuitesList);
return suitesList.toArray(new String[suitesList.size()]);
}