SSL Handshake

  • Antworten:6
  • OffenNicht stickyNicht beantwortet

16.04.2012 10:40:50

Hallo zusammen

Ich mal wieder mit meinem Lieblingsproblem:
Ich habe einen WebService (.NET) welcher unter SSL läuft. Dies hat bis vor kurzem super funktionirert. Nun hat mein Host irgendwas mit dem SSL
gemacht (gemäss Aussage soll es wie früher sein...) jedoch habe ich nun Problem mit dem WebService. Ich erhalte immer nun den I/O Fehler weil das SSL-Handshake nicht klappt.

Habt Ihr mir hier ev. ein paar Tipps welche ich berücksichtigen soll mit dem SSL Zeugs?
Was es auch zu sagen gibt: es läuft noch eine iPhone-App - und WPF-Client über den gleichen Service. Diese funktionieren tadellos :(

Danke für Eure Hilfe schon im Voraus.

16.04.2012 11:24:23

Ich erhalte folgenden Fehler:
SSL handshake failure: I/O error during system call, Unknown error: 0

Mit folgendem Aufruf:

1SoapObject request = new SoapObject(HC.NAMESPACE, HC.METHOD_GETFILIALEN);
2
3 request.addProperty("ID", 0);
4
5 SoapSerializationEnvelope envelope =
6 new SoapSerializationEnvelope(SoapEnvelope.VER11);
7 envelope.dotNet = true;
8
9 envelope.setOutputSoapObject(request);
10 HttpTransportSE androidHttpTransport = new HttpTransportSE(HC.URL);
11 try
12 {
13 androidHttpTransport.call(HC.Filial_SOAP_ACTION, envelope); <-- Hier Knallts :)
14 SoapObject receivedFilialen = (SoapObject)envelope.getResponse();
15 List<Filiale> filiale = new ArrayList<Filiale>();

16.04.2012 11:49:40

Genügt das?

04-16 09:47:50.915: E/NativeCrypto(512): Unknown error 5 during connect
04-16 09:47:50.916: W/System.err(512): java.io.IOException: SSL handshake failure: I/O error during system call, Unknown error: 0
04-16 09:47:50.936: W/System.err(512): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.nativeconnect(Native Method)
04-16 09:47:50.936: W/System.err(512): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:316)
04-16 09:47:50.946: W/System.err(512): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.java:168)
04-16 09:47:50.946: W/System.err(512): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:399)
04-16 09:47:50.956: W/System.err(512): at org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:147)
04-16 09:47:50.956: W/System.err(512): at org.ksoap2.transport.ServiceConnectionSE.connect(Unknown Source)
04-16 09:47:50.956: W/System.err(512): at org.ksoap2.transport.HttpTransportSE.call(Unknown Source)
04-16 09:47:50.956: W/System.err(512): at service.takeonline.ch.PiKeWa.populateFiliale(PiKeWa.java:781)
04-16 09:47:50.966: W/System.err(512): at service.takeonline.ch.PiKeWa.access$0(PiKeWa.java:767)
04-16 09:47:50.966: W/System.err(512): at service.takeonline.ch.PiKeWa$LoadFilialeTask.doInBackground(PiKeWa.java:232)
04-16 09:47:50.966: W/System.err(512): at service.takeonline.ch.PiKeWa$LoadFilialeTask.doInBackground(PiKeWa.java:1)
04-16 09:47:50.966: W/System.err(512): at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-16 09:47:50.976: W/System.err(512): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-16 09:47:50.976: W/System.err(512): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-16 09:47:50.976: W/System.err(512): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
04-16 09:47:50.986: W/System.err(512): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
04-16 09:47:50.986: W/System.err(512): at java.lang.Thread.run(Thread.java:1096)

16.04.2012 12:25:50

Hmm...ist das alles? Steht leider nicht allzuviel interessantes drin.

Ich hatte damals Fehler im Sinne von "not trusted server certificate".
Allerdings nutze ich auch nur den "normalen" HttpClient. Dort kann man das beheben, indem man eine eigene Implementierung der SSLSocketFactory einsetzt.

16.04.2012 12:33:36

Ich bin auch gar nicht zimperlich was das Zertifikat angeht...

1try {
2 HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){
3 public boolean verify(String hostname, SSLSession session) {
4 return true;
5 }});
6 SSLContext context = SSLContext.getInstance("TLS");
7 context.init(null, new X509TrustManager[]{new X509TrustManager(){
8 public void checkClientTrusted(X509Certificate[] chain,
9 String authType) throws CertificateException {}
10 public void checkServerTrusted(X509Certificate[] chain,
11 String authType) throws CertificateException {}
12 public X509Certificate[] getAcceptedIssuers() {
13 return new X509Certificate[0];
14 }}}, new SecureRandom());
15 HttpsURLConnection.setDefaultSSLSocketFactory(
16 context.getSocketFactory());