Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

SSL, Server / Client cert, Client private key

Das Thema "SSL, Server / Client cert, Client private key" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 13.10.2009, 14:53   #1 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 06.10.2009
Beiträge: 60
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Standard SSL, Server / Client cert, Client private key

Hallo

zum Glück habe ich ein Anhaltspunkt und weiß genau wo ich hin muss.
Zur Verdeutlichung hier der Ablauf in einer anderen App, welcher nach
Android/Java gebracht werden soll.

Es existiert ein verbundener Socket, der in SSL-Mode versetzt werden soll.
Die bisherige App macht das mit openSSL wie folgt.

// Methode festlegen
m_pSSLMethod = TLSv1_client_method();
// Context erstellen
m_pSSLContext = SSL_CTX_new(m_pSSLMethod);
// selbst signiertes Serverzertifikat, nicht in Cert-chain einer
// der großen bekannten CAs enthalten !
SSL_CTX_load_verify_locations(m_pSSLContext, CA_CERT);
// Clientzertifikat laden
SSL_CTX_use_certificate_file(m_pSSLContext, CERT_CLIENT, SSL_FILETYPE_PEM);
// Clientkey laden
SSL_CTX_use_PrivateKey_file(m_pSSLContext, PRIV_CLIENT, SSL_FILETYPE_PEM);

soweit die Vorbereitungen, und nun der SSL-Handshake

// SSL initalisieren ...
m_pSSL = SSL_new(m_pSSLContext);
// ... den bereits verbundenen Socket an SSL Layer übergeben
SSL_set_fd(m_pSSL, m_sock);
// ... Status setzten
SSL_set_connect_state(m_pSSL);
// Handshake
SSL_do_handshake(m_pSSL);



Mein Problem ist nur den Wald vor Bäumen nicht zu sehen

obwohl ich diesmal schon ein paar Infos hab sammeln können
wie dieses Beispiel:
SSLContext and Key manager : SSL SocketSecurityJava Tutorial

und diese Meldung habe ich auch schon im Debugger gesehen
[android-developers] CertPathValidatorException: TrustAnchor for CertPat


wie schauen nun meine Codefragmente in Java aus:

// Context erstellen mit TLS Methode
SSLContext ctx = SSLContext.getInstance("TLS");

// , laden der Zertifikate, wobei ich diese als
// -----BEGIN CERTIFICATE-----
// und
// -----BEGIN RSA PRIVATE KEY-----
// vorliegen habe
//
// hier fehlt mir ebend der entscheidende Teil



// SSLSocket an bestehenden Socket binden
SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault();
// : SSLSocket mit SSLContext "initalisiere"


SSLSocket c =(SSLSocket)f.createSocket(
mSocket, mHost, mPort, false);
// Handshake

c.startHandshake();



Mein Problem ist nicht besonders androidspezifisch, bestenfalls - wie
bekomme ich meine Zerti-Dateien in den Emulator geladen. Weil ohne
die da drin zu haben muss ich wohl mit InputStream garnicht erst an-
fangen.


Herzlichen Dank fürs Kopfzerbrechen schon mal
RED-BARON ist offline   Mit Zitat antworten
Alt 19.10.2009, 17:39   #2 (permalink)
Android-Hilfe.de Mitglied

Registriert seit: 06.10.2009
Beiträge: 60
Abgegebene Danke: 10
Erhielt 1 Danke für 1 Beitrag
Standard AW: SSL, Server / Client cert, Client private key



macht die Verschlüsselung zwar etwas sinnlos aber es funktioniert
erstmal so:

Code:
final TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager(){ public java.security.cert.X509Certificate[] getAcceptedIssuers(){returnnull; } publicvoid checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){} publicvoid checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
Code:
mSSLContext = SSLContext.getInstance("TLS");
mSSLContext.init(null, trustAllCerts, null); //new java.security.SecureRandom()); mSSLSocketFactory = mSSLContext.getSocketFactory(); mSocket = (SSLSocket)mSSLSocketFactory.createSocket(mSocket, mHost, mPort, true); ((javax.net.ssl.SSLSocket)mSocket).addHandshakeCompletedListener(new MyHandshakeListener()); ((javax.net.ssl.SSLSocket)mSocket).startHandshake(); mSocket.getOutputStream().flush();
demnach braucht es das Clientzertifikat und den privaten Schlüssel nicht.
RED-BARON ist offline   Mit Zitat antworten
Alt 10.12.2009, 15:04   #3 (permalink)
Neuer Benutzer

Registriert seit: 10.12.2009
Beiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard AW: SSL, Server / Client cert, Client private key

Hallo,
vorneweg: Ich bin kein Coder und habe erst seit ein paar Tagen das HTC Tattoo/Android Phone). Trotzdem habe ich das Gefühl das der Beitrag nahe an meinem Problem liegt:

Ich benütze für meine beruflichen Emails einen Account auf einem eigenen Server mit einem selbst - signierten Zertifikat.

Das Abrufen der Mails via HTC Mail (HTC Tattoo) oder K9 funktionert einwandfrei, aber das senden (SMTP mit SSL) versagt. Meldung:
"Verbindung mit Mailserver kann nicht hergestellt werden um Kontoinformationen zu prüfen. Der Server reagiert nicht."

Meine Hypothese: Es stimmt etwas mit der Authentifizierung nicht, da der Client das Zertifikat nicht liefert. Jetzt habe ich schon etwas im Netz gestöbert und es gibt wohl auf Android keine Möglichkeit Zertifikate einzufügen/einzusehen (Astro als Filemanger finde ich nichts).

Habt ihr eine Idee wie ich die Nuß knacken kann...?
t-droid ist offline   Mit Zitat antworten
Alt 10.12.2009, 18:23   #4 (permalink)
Android Experte

Registriert seit: 30.04.2009
Beiträge: 542
Abgegebene Danke: 27
Erhielt 55 Danke für 44 Beiträge
Standard AW: SSL, Server / Client cert, Client private key

Ich habe mal irgendwo gelesen, dass man das Zertifikat mit dem Browser aufrufen soll, damit diese in den Android Zertifikatsspeicher gelegt wird - vielleicht hilft Dir das ja weiter.

Viele Grüße,
arez
arez ist offline   Mit Zitat antworten
Alt 11.12.2009, 09:34   #5 (permalink)
Neuer Benutzer

Registriert seit: 10.12.2009
Beiträge: 6
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Problem aus Zufall gelöst!

Hallo,
erstmal danke für die Antwort...

Jippee - Habs hinbekommen!

Es könnte gut sein, daß die Methode zumindest Teil der Lösung war: Habe nämlich die URL mal in den Browser kopiert und das Online Mail Programnm besucht. Dabei kam die Meldung wegen des selbst-signierten Zertifikats - beim erneuten aufrufen nicht mehr.

Dannach bin ich nochmal meine Einstellungen im Mail Programm durch gegangen und habe noch mal diverses probiert: Und siehe da plötzlich hat es funktionert!! Dabei habe ich mal die Verschlüsselung zufällig von SSL auf TLS gestellt.

Ein glücklicher Android Benürtzer mehr!
t-droid ist offline   Mit Zitat antworten
Alt 11.12.2009, 09:43   #6 (permalink)
Android Experte

Registriert seit: 30.04.2009
Beiträge: 542
Abgegebene Danke: 27
Erhielt 55 Danke für 44 Beiträge
Standard AW: SSL, Server / Client cert, Client private key

Schön, wie gesagt, ich habe mal irgendwo gelesen, dass es noch ein Android-Bug ist, dass man die Zertifikate nur über Websites integrieren kann und nicht selbst...

Viele Grüße,
arez
arez ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
E-Mail Client JayCoo Samsung Galaxy (I7500) Forum 5 20.06.2010 13:10
[S]Blog-Client Bear Knuckle Sonstige Apps & Widgets 1 24.03.2010 20:14
Jabiru - Jabber Client Zipp Sonstige Apps & Widgets 5 08.11.2009 12:36
Twitter Client Droid_Power Sonstige Apps & Widgets 9 11.10.2009 12:07
K9 mail client bestg1 T-Mobile G1 Forum 2 12.02.2009 23:34




Du liest gerade: "SSL, Server / Client cert, Client private key" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.