2013-07-13 10 views
6

Es fühlt sich an wie ich die ganze Bahn schon gesucht, aber alles, was ich gefunden sind Hinweise, wie ein ungültiges oder selbstsignierten zu akzeptiert Zertifikat automatisch. (Mit benutzerdefinierten HttpClient und SSLSocketFactory - Ich habe schon das funktioniert.)Browser-ähnliches Verhalten auf ungültige/selbstsignierte Zertifikaten

Aber was ich für meine App will ist, dass der Benutzer einen browserähnlichen Dialog fragt etwas wie "Wollen Sie diesem Server wirklich vertrauen? Hier, schau dir sein Zertifikat an. " (Nur wenn das Zertifikat den Standardprüfungen nicht entspricht.)

Dann sollte das Zertifikat in den Zertifikatsspeicher der App gestellt werden, damit es beim nächsten Mal automatisch akzeptiert wird.

Also, was ich wissen müssen, ist:

  • Wie das Zertifikat (Kette) für einen bestimmten Host/Port-Kombination zum Download (in der Lage sein es dem Benutzer zu zeigen)?
  • Wie wird das Zertifikat gespeichert, damit ich es später in eine KeyStore laden kann?

Dies ist mein geplanter Arbeitsablauf in der App:

  1. eine Anfrage an den Server sendet mit meinem benutzerdefinierten HttpClient. Vielleicht ist das Zertifikat dem System vertraut oder schon in meinem Geschäft (wenn ja, gehe zu 4).
  2. Wenn die Anforderung aufgrund von SSL-Problemen fehlgeschlagen ist, zeigen Sie dem Benutzer das Zertifikat an und fragen Sie, ob dieser Verbindung vertraut werden soll.
  3. Wenn der Benutzer Vertrauen gewählt hat, speichern Sie das Zertifikat in meinem Geschäft und gehen Sie zu 1.
  4. Hurra, Verbindung ist betriebsbereit.

Also weiß jemand, wie man das macht?

+0

Wow, Sie haben wirklich recht mit der Tatsache, dass alles, was Sie bei Google finden können, wie CA Checks deaktivieren .. –

Antwort

0

Deaktivieren Sie keine CA-Prüfungen und fangen Sie die Ausnahme ab, wenn Sie versuchen, eine Verbindung zu einem Nicht-CA-Zertifikat herzustellen. Wenn Sie die Ausnahme abfangen, starten Sie Ihre Seite, damit der Benutzer sie akzeptiert/ablehnt. Wenn er akzeptiert, starten Sie eine neue Verbindung mit deaktivierten CA-Prüfungen.

+0

Vielen Dank für Ihre Antwort. Im Moment arbeite ich nicht mehr an diesem Projekt. Ich werde auf Ihre Antwort zurückkommen, sobald ich die Arbeit wieder aufgenommen habe. – fero