"Not trusted server certificate"

  • Antworten:13
Gelöschter Account
  • Forum-Beiträge: 102

15.06.2010, 23:56:08 via Website

Hallo,

Ich würde gerne programmatisch mit einem HTTPClient auf eine https-URL zugreifen, bei der das Server-Zertifikat aber ein selbst erstelltes Zertifikat verwendet.
Aktuell mache ich das ungefähr so
1HttpClient httpclient = new DefaultHttpClient();
2HttpPost httpPost = new HttpPost(url);
3HttpResponse response = httpclient.execute(httpPost);

Jetzt bekomme ich aber die Meldung "Not trusted server certificate". Hatte dieses Problem schon jemand und hat eine Lösung dafür gefunden?

lg
Bernd

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

16.06.2010, 12:39:04 via Website

Das sollte wie mit plain Java funtzen, Ich würde das in dieser Art versuchen zu lösen: http://ross-o.com/index.php?/archives/19-Adding-SSL-to-HttpClient.html

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

16.06.2010, 18:54:02 via Website

Ich möchte an der Stelle nur mal darauf hinweisen, dass die Verwendung solcher Methoden wie Mac sie beschreibt nicht wirklich dazu angedacht sind, dem Kunden Sicherheit zu verkaufen. Hier wird eine sichere Verbindung vorgegaukelt, die jedoch in Wirklichkeit keiner Überprüfung unterliegt.

Besser wäre es die den Kunden (Nutzer der App) Applikatorisch darauf hinzuweisen, dass dieses Zertifikat keine Trusted Certificate Chain enthält und man vorher bestätigen muss das man diesem Server vertrauen möchte.

Noch einfacher wäre es natürlich ein vernünftiges SSL Zertifikat zu benutzen. Gibts mittlerweile glaub ich auch schon kostenlos für bestimmte private Anwendungsfälle.

lg Voss

Antworten
Gelöschter Account
  • Forum-Beiträge: 102

16.06.2010, 19:02:27 via App

Danke, die Problematik ist mir schon bewusst.
Aber wenn ich eine Anwendung schreiben will, welche auf meinen privaten Server zugreift, brauche ich eine Möglichkeit ein "unsicheres" Zertifikat zuzulassen.
Würde das über eine Einstellung "unsicheres Zertifikat zulassen" steuern.

Hätte wer einen Beispielcode, welcher zeigt wie man ein Rootzertifikat (z. B. CA Cert) importiert?
Das wäre die zweite oder zusätzliche Möglichkeit.

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

16.06.2010, 19:29:50 via Website

Bspw. so ....

keytool -import -file 'path to .cer' -trustcacerts -v -keystore 'path to keystore

Bspw.: keytool -import -alias myroot -file eak.qss.wko.at.cer -trustcacerts -v -keystore cacerts

Damit wird ein Zertifikat importiert, auch hier muß natürlich das Passwort des Keystores bekannt sein.

Das Standardpasswort einer Javainstallation ist "changeit"

Ein Root-Zertifikat (CA) brauchst Du eigentlich nicht importieren, da dieses bereits im cacerts enthalten sein sollte. Ansonsten kannst Du natürlich jedes Zertifikat so installieren. Auch Root Zertifikate.

lg Voss

Antworten
Gerrit Leder
  • Forum-Beiträge: 4

13.07.2010, 14:30:53 via Website

Jörg V.
Bspw. so ....

keytool -import -file 'path to .cer' -trustcacerts -v -keystore 'path to keystore

Bspw.: keytool -import -alias myroot -file eak.qss.wko.at.cer -trustcacerts -v -keystore cacerts

Damit wird ein Zertifikat importiert, auch hier muß natürlich das Passwort des Keystores bekannt sein.

Das Standardpasswort einer Javainstallation ist "changeit"

Ein Root-Zertifikat (CA) brauchst Du eigentlich nicht importieren, da dieses bereits im cacerts enthalten sein sollte. Ansonsten kannst Du natürlich jedes Zertifikat so installieren. Auch Root Zertifikate.

Habe auch die Fehlermeldung im Subject. Ok für das importieren meines Webserver Zertifikates in cacerts. Aber die Fehlermeldung bleibt im Android Client. Daher meine Frage: hat der "Java unter Windows" cacerts einen Zusammenhang mit dem Android Client? Oder muss ich mein Webserver Zertifikat in einen speziellen "Android cacerts" importieren?

Vielen Dank im voraus
Gerrit

Antworten
Gelöschter Account
  • Forum-Beiträge: 102

13.07.2010, 19:09:49 via Website

Ich habe irgendwie alles probiert. Die CAcert-Zertifikate importiert. Die Methode von Mac habe ich auch probiert.
Habe es aber aktuell noch nicht geschafft das Problem zu lösen.
Da mir aber momentan die Zeit fehlt, habe ich mich dann auch nicht weiter damit beschäftit :-(

Antworten
Gerrit Leder
  • Forum-Beiträge: 4

13.07.2010, 19:30:33 via Website

Hallo Bernd,

habe hier eine kurze Anleitung, wie das "root.crt" und analog das eigene Webserver Certifikat in den Android "cacerts.bks" importiert wird. :D
http://wiki.cacert.org/ImportRootCert#Android_Phones

Habs aber noch nicht getestet... -_-

Viele Grüße
Gerrit

Antworten
Gelöschter Account
  • Forum-Beiträge: 102

13.07.2010, 19:51:25 via Website

Gerrit Leder
Hallo Bernd,

habe hier eine kurze Anleitung, wie das "root.crt" und analog das eigene Webserver Certifikat in den Android "cacerts.bks" importiert wird. :D
http://wiki.cacert.org/ImportRootCert#Android_Phones

Habs aber noch nicht getestet... -_-

Viele Grüße
Gerrit

Den Wiki Beitrag kenne ich und ich habe das schon getestet! Ich habe auch auf die CAcert Mailingliste geschrieben und den Hinweis auf folgende Android-Bugs bekommen:
http://code.google.com/p/android/issues/detail?id=8409
http://code.google.com/p/android/issues/detail?id=8611

Antworten
Gerrit Leder
  • Forum-Beiträge: 4

14.07.2010, 13:54:36 via Website

Bernd Sch
Gerrit Leder
Hallo Bernd,

habe hier eine kurze Anleitung, wie das "root.crt" und analog das eigene Webserver Certifikat in den Android "cacerts.bks" importiert wird. :D
http://wiki.cacert.org/ImportRootCert#Android_Phones

Habs aber noch nicht getestet... -_-

Viele Grüße
Gerrit

Den Wiki Beitrag kenne ich und ich habe das schon getestet! Ich habe auch auf die CAcert Mailingliste geschrieben und den Hinweis auf folgende Android-Bugs bekommen:
http://code.google.com/p/android/issues/detail?id=8409
http://code.google.com/p/android/issues/detail?id=8611

An den Android-Bugs liegt es bei mir nicht, weil ich ja den Common Name (CN) bei einem self-signed Certificate selbst setzen kann. Aber bei meiner Anleitung (s. o.) zum Zertifikats Import bleibe ich hier stehen, weil ich kein root Zugriff auf mein Android Handy habe:

1# remount /system read-write
2$ adb shell remount -o remount,rw /system
3remount: permission denied
4$ adb root
5adbd cannot run as root in production builds

So bleibt nur noch der Emulator zum testen... melde mich, wenn es geklappt hat!

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

14.07.2010, 17:11:29 via Website

Leider akzeptiert Android nur Zertifikate im PKCS12 format, (.p12)
So lange Du das zu installierende Zertifikat also im pkcs12 format als .p12 als Endung vorliegen hast, kannst Du es auch direkt über die Handyfunktion:
"Einstellungen - Standort und Sicherheit - Von SD-Karte installieren" ins Handy installieren, ganz ohne Root .

Sollte theoretisch ab 2.1 funktionieren.

Ich hab unter diesem Link: Secure Trusts schon mal ein wenig was dazu geschrieben, bin aber auch noch nicht so recht weitergekommen.

— geändert am 14.07.2010, 17:19:31

lg Voss

Antworten
Gerrit Leder
  • Forum-Beiträge: 4

14.07.2010, 17:56:39 via Website

Jörg V.
Leider akzeptiert Android nur Zertifikate im PKCS12 format, (.p12)
So lange Du das zu installierende Zertifikat also im pkcs12 format als .p12 als Endung vorliegen hast, kannst Du es auch direkt über die Handyfunktion:
"Einstellungen - Standort und Sicherheit - Von SD-Karte installieren" ins Handy installieren, ganz ohne Root .

Sollte theoretisch ab 2.1 funktionieren.

Ich hab unter diesem Link: Secure Trusts schon mal ein wenig was dazu geschrieben, bin aber auch noch nicht so recht weitergekommen.

Danke für den Link!

Ob es an .p12 scheitern wird weiß ich noch nicht. Jetzt bekomme ich schon nicht die /sdcard gemountet um mit
1adb push apache.cer /sdcard/apache.p12
: "permission denied" zu umgehen.

Habe auch "adb start-server" mit Administratorrechten versucht.

"adb shell mount" zeigt kein gemountetes /sdcard an!!! Sorry kann kein copy & paste aus der DOS Box machen...

Wie funktioniert das push/mount mit /sdcard?

Antworten
Gelöschter Account
  • Forum-Beiträge: 102

14.07.2010, 18:06:58 via Website

Jörg V.
Leider akzeptiert Android nur Zertifikate im PKCS12 format, (.p12)
So lange Du das zu installierende Zertifikat also im pkcs12 format als .p12 als Endung vorliegen hast, kannst Du es auch direkt über die Handyfunktion:
"Einstellungen - Standort und Sicherheit - Von SD-Karte installieren" ins Handy installieren, ganz ohne Root .

Sollte theoretisch ab 2.1 funktionieren.

Ich hab unter diesem Link: Secure Trusts schon mal ein wenig was dazu geschrieben, bin aber auch noch nicht so recht weitergekommen.

Auch das habe ich schon probiert. Also die PEM-Zertifikate von CAcert (Class1 + Class3) in ein .p12 Format konvertiert und importiert.
Hat leider auch nicht geholfen

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

14.07.2010, 18:43:55 via Website

Dann wird der /system/etc/security/cacerts.bks lediglich für W-Lan und VPN Zertifikat Austausch Verwendung finden ...

So ein Mist ....

lg Voss

Antworten