Hier ist ein Beispiel, das zeigt, wie Sie dies tun können. Es zeigt, dass Sie beim Herstellen einer Verbindung mit gmail.com Port 443 ohne SNI-Unterstützung ein Zertifikat für mail.google.com erhalten. Dies wird in diesem Fall erwartet, also überprüfen Sie, ob das Zertifikat tatsächlich für mail.google.com ist: Glücklicherweise können Sie HttpsURLConnection beibringen, einem bestimmten Satz von Zertifizierungsstellen zu vertrauen. Die Prozedur kann ein wenig verworren sein, daher ist unten ein Beispiel, das eine bestimmte Zertifizierungsstelle aus einem InputStream nimmt, sie verwendet, um einen KeyStore zu erstellen, der dann zum Erstellen und Initialisieren eines TrustManagers verwendet wird. Ein TrustManager verwendet das System, um Zertifikate vom Server zu überprüfen, und – indem es eines aus einem KeyStore mit einer oder mehreren Zertifizierungsstellen erstellt – sind dies die einzigen Zertifizierungsstellen, denen dieser TrustManager vertraut. Es ist wenig darüber bekannt, warum diese Option gegeben wird. Ein Zertifikat sollte immer in der Lage sein, beides zu tun. Mein Rat ist, diejenige auszuwählen, die dem am nächsten kommt, was Sie mit Ihrem Zertifikat tun möchten, aber es spielt keine Rolle, welche Sie ausgewählt haben, da Sie sich dennoch mit einem X.509-Zertifikat von GlobalSign in beiden Diensten authentifizieren sollten. Um dieses Risiko zu mindern, hat Android die Möglichkeit, bestimmte Zertifikate oder sogar ganze CAs auf die schwarze Liste zu setzen. Während diese Liste in der Vergangenheit in das Betriebssystem integriert wurde, kann diese Liste ab Android 4.2 aus der Ferne aktualisiert werden, um zukünftige Kompromisse zu bewältigen. Wie dies in der Praxis aussieht, finden Sie hier die mail.google.com Zertifikatskette, wie sie vom Befehl openssl s_client angezeigt wird: Geben Sie Ihr Zertifikatsabholkennwort ein, wenn Sie dazu aufgefordert werden. Wichtig: Wenn Sie installierte Zertifikate entfernen, werden die permanenten Systemzertifikate, die Ihr Telefon benötigt, nicht entfernt. Ein Grund dafür ist ein Fehler bei der Serverkonfiguration.

Der Server ist mit einem Zertifikat konfiguriert, das keine alternativen Namensfelder für Antragsteller oder Betreff enthält, die mit dem Server übereinstimmen, den Sie erreichen möchten. Es ist möglich, ein Zertifikat mit vielen verschiedenen Servern zu verwenden. Wenn Sie sich z. B. das google.com Zertifikat mit openssl s_client -connect google.com:443 | openssl x509 -text sie können sehen, dass ein Betreff, der *.google.com unterstützt, aber auch alternative Namen für *.youtube.com, *.android.com und andere betrefft. Der Fehler tritt nur auf, wenn der Servername, mit dem Sie eine Verbindung herstellen, vom Zertifikat nicht als akzeptabel aufgeführt wird. Jedes Stammzertifikat wird in einer einzelnen Datei gespeichert. Jede Datei enthält das Zertifikat im PEM-Format, eines der häufigsten Formate für SSL-Zertifikate, das mit zwei Tags , –BEGIN CERTIFICATE – und ––END CERTIFICATE – und in base64 codiert wird. Das Zertifikat ist auch im X.509-Format enthalten. Derzeit werden 135 Roots in Android Oreo (8.1) ab April 2018 vertraut. Leider kann dies auch aus einem anderen Grund passieren: virtuelles Hosting.

Wenn sie einen Server für mehr als einen Hostnamen für HTTP freigeben, kann der Webserver von der HTTP/1.1-Anforderung aus mitteilen, nach welchem Zielhostnamen der Client sucht. Leider ist dies mit HTTPS kompliziert, da der Server wissen muss, welches Zertifikat zurückgegeben werden soll, bevor er die HTTP-Anforderung sieht. Um dieses Problem zu beheben, unterstützen neuere SSL-Versionen, insbesondere TLSv.1.0 und höher, die Server Name Indication (SNI), die es dem SSL-Client ermöglicht, den beabsichtigten Hostnamen für den Server anzugeben, damit das richtige Zertifikat zurückgegeben werden kann. Sie können einen eigenen TrustManager erstellen, der dem Serverzertifikat dieses Mal direkt vertraut. Dies hat alle Nachteile, die zuvor diskutiert wurden, wenn Sie Ihre App direkt an ein Zertifikat binden, aber sicher durchgeführt werden können. Sie sollten jedoch darauf achten, dass Ihr selbstsigniertes Zertifikat über einen recht starken Schlüssel verfügt. Ab 2012 ist eine 2048-Bit-RSA-Signatur mit einem Exponenten von 65537, der jährlich abläuft, akzeptabel.

Written by shivamsood

I am a social activist and social worker based out of New Delhi. I fight for the basic civic rights of citizens such as water, electricity, hygiene, education, public health & safety. My mission is and always has been to get all citizens their basic civic & human rights. My fight is not against one individual or government but is against any institution, person or entity that denies citizens their rights.