| |||||||
Das Thema "Zertifikate laden/ignorieren" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
| Ich bin atm an einer App dran bei der mit verschiedenen (vom nutzer eingegebenen) Webseiten kommuniziere. Das klappt soweit auch ganz gut, bis auf den Fall wenn man ein Sicherheitszertifikat benötigt. Habe nun schon einige Beispiele die ich gefunden habe versucht zu Implementieren, Problem dabei ... irgendwie wird es komplett ignoriert wie mir scheint. Der Code, zum "ignorieren" der Zertifikate, sieht momentan so aus Code: public final static class WebClientDevWrapper {
public static HttpClient wrapClient(HttpClient base) {
try {
SSLContext ctx = SSLContext.getInstance("SSL");
X509TrustManager tm = new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain,
String authType)
throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain,
String authType)
throws CertificateException {
}
};
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = new SSLSocketFactory(null);
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = base.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", ssf, 443));
return new DefaultHttpClient(ccm, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
} Code: HttpClient client = new DefaultHttpClient(); //unwichtiges weggelassen ;)
client = WebClientDevWrapper.wrapClient(client);
String postURL = "http://bli.bla.blubb";
HttpPost post = new HttpPost(postURL);
post.addHeader(BasicScheme.authenticate(new UsernamePasswordCredentials(username, password), "UTF-8", false));
client.execute(post); Code: 09-02 10:20:10.470: WARN/System.err(5073): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:258) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 09-02 10:20:10.470: WARN/System.err(5073): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 09-02 10:20:10.480: WARN/System.err(5073): at my.package.name.AndroidPxAppActivity.login(AndroidPxAppActivity.java:89) 09-02 10:20:10.480: WARN/System.err(5073): at my.package.name.AndroidPxAppActivity$2.onClick(AndroidPxAppActivity.java:174) 09-02 10:20:10.480: WARN/System.err(5073): at android.view.View.performClick(View.java:2485) 09-02 10:20:10.480: WARN/System.err(5073): at android.view.View$PerformClick.run(View.java:9080) 09-02 10:20:10.480: WARN/System.err(5073): at android.os.Handler.handleCallback(Handler.java:587) 09-02 10:20:10.480: WARN/System.err(5073): at android.os.Handler.dispatchMessage(Handler.java:92) 09-02 10:20:10.480: WARN/System.err(5073): at android.os.Looper.loop(Looper.java:123) 09-02 10:20:10.480: WARN/System.err(5073): at android.app.ActivityThread.main(ActivityThread.java:3695) 09-02 10:20:10.480: WARN/System.err(5073): at java.lang.reflect.Method.invokeNative(Native Method) 09-02 10:20:10.480: WARN/System.err(5073): at java.lang.reflect.Method.invoke(Method.java:507) 09-02 10:20:10.480: WARN/System.err(5073): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 09-02 10:20:10.480: WARN/System.err(5073): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 09-02 10:20:10.480: WARN/System.err(5073): at dalvik.system.NativeStart.main(Native Method) EDIT: Hab soeben rausgefunden, dass wenn ich versuche mich mit einer Webseite ohne Zertifikat zu verbinden, der gleiche Fehler auftritt. MfG nijoX Geändert von nijoX (30.09.2011 um 09:39 Uhr) |
| | |
| | #2 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
Moinsen, das No peer problem hab ich jetzt zumindest in den griff bekommen durch das abändern der WebCLientDevWrapper Klasse Code: public static HttpClient wrapClient(HttpClient base) {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory ssf = new SSLSocketFactory(trustStore);
ssf.setHostnameVerifier(new X509HostnameVerifier() {
@Override
public void verify(String host, String[] cns, String[] subjectAlts)
throws SSLException {
}
@Override
public void verify(String host, X509Certificate cert) throws SSLException {
}
@Override
public void verify(String host, SSLSocket ssl) throws IOException {
}
@Override
public boolean verify(String host, SSLSession session) {
return true;
}
});
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", ssf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(new BasicHttpParams(), registry);
return new DefaultHttpClient(ccm, base.getParams());
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
} Problem: da fleig nun erneut eine Exception zu der ich bei miener rechnerche nicht´s aber auch gar nichts gefunden hab Exception: Code: 09-03 14:01:48.520: WARN/System.err(1403): javax.net.ssl.SSLHandshakeException: java.security.InvalidAlgorithmParameterException: trustAnchors.isEmpty() 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:477) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:750) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:692) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:171) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 09-03 14:01:48.530: WARN/System.err(1403): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 09-03 14:01:48.540: WARN/System.err(1403): at my.package.name.CertificateTestActivity$4.run(CertificateTestActivity.java:268) 09-03 14:01:48.540: WARN/System.err(1403): at java.util.Timer$TimerImpl.run(Timer.java:284) 09-03 14:01:48.540: WARN/System.err(1403): Caused by: java.security.cert.CertificateException: java.security.InvalidAlgorithmParameterException: trustAnchors.isEmpty() 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:144) 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:664) 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method) 09-03 14:01:48.540: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474) 09-03 14:01:48.540: WARN/System.err(1403): ... 16 more 09-03 14:01:48.540: WARN/System.err(1403): Caused by: java.security.InvalidAlgorithmParameterException: trustAnchors.isEmpty() 09-03 14:01:48.550: WARN/System.err(1403): at java.security.cert.PKIXParameters.checkTrustAnchors(PKIXParameters.java:607) 09-03 14:01:48.550: WARN/System.err(1403): at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:84) 09-03 14:01:48.550: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.<init>(TrustManagerImpl.java:75) 09-03 14:01:48.550: WARN/System.err(1403): at org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl.engineGetTrustManagers(TrustManagerFactoryImpl.java:132) 09-03 14:01:48.550: WARN/System.err(1403): at javax.net.ssl.TrustManagerFactory.getTrustManagers(TrustManagerFactory.java:225) 09-03 14:01:48.550: WARN/System.err(1403): at org.apache.http.conn.ssl.SSLSocketFactory.createTrustManagers(SSLSocketFactory.java:263) 09-03 14:01:48.550: WARN/System.err(1403): at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:190) 09-03 14:01:48.550: WARN/System.err(1403): at org.apache.http.conn.ssl.SSLSocketFactory.<init>(SSLSocketFactory.java:216) 09-03 14:01:48.550: WARN/System.err(1403): at my.package.name.CertificateTestActivity.wrapClient(CertificateTestActivity.java:201) 09-03 14:01:48.550: WARN/System.err(1403): at my.package.name.CertificateTestActivity$4.run(CertificateTestActivity.java:260) 09-03 14:01:48.550: WARN/System.err(1403): ... 1 more ![]() MfG nijoX |
| | |
| | #3 (permalink) |
| Junior Mitglied Registriert seit: 06.09.2011
Beiträge: 38
Abgegebene Danke: 2
Erhielt 5 Danke für 5 Beiträge
|
schön das keiner mein Problem kennt ![]() hab´s aber inzwischen gelöst bekommen durch diesen wunderbaren link Android and self-signed ssl certificates | Synyx Weblog ![]() für alle die mal auf das selbe Problem stoßen sollten. Der Code funktioniert gut so wie er ist aber wenn man mehrere HttpPost´s in kurzer Zeit senden will sollte es noch optimiert werden, sonst dauert eine kleine Anfrage schonmal bis zu einer Sekunde. Hoffe das hilft einigen Leuten weiter MfG nijoX |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zertifikate installieren | fizwidget | Android Allgemein | 7 | 02.06.2011 18:43 |
| Threads ignorieren | matthes77 | Anregungen | 2 | 30.12.2010 11:50 |
| Zertifikate verwalten | TheSpiritof69 | Root / Hacking / Modding für Motorola Milestone | 0 | 20.08.2010 11:47 |
| Headset-Taste ignorieren?? | Fahni | Android Allgemein | 1 | 29.03.2010 19:22 |