Vor kurzem ist mir aufgefallen das mein lieblings Podcastclient auf meinem Smartphone einen Podcastfeed nicht mehr abrufen kann. Der Test mit dem integrierten Browser zeigte aber kein Problem. Chrome konnte auf meinem Huawei P9 mit EMUI 5.0 den Feed ohne Probleme abrufen.

Nachdem ich mit dem SSL Server Test von www.ssllabs.com die URL getestet habe, ist mir aufgefallen, dass der Server nur TLS 1.2 mit ECDH Chiffren unterstütz. Das sollte eigentlich kein Problem sein, den auch die interne URL Routine unterstützt TLS 1.2 und ECDH Chiffren. Jedoch scheint es so zu sein, dass der Server nur secp384r1 anbietet, die interne URL Routine jedoch nur secp256r1 als Elliptische Kurve (EC) verwendeten kann.

Ähnlich wie bei den TLS Chiffren müssen auch bei den EC der Server und der Client sich auf eine bestimmte Kurve einigen. Wenn das nicht klappt kann eine verschlüsselte Verbindung aufgebaut werden. Neben secp256r1 gibt es eine ganze Reihe von EC die in Verbindung mit ECDH verwendet werden können.  Weitere sind z.B. secp384r1, secp521r1 oder brainpoolP512r1. Moderne Browser unterstützen relative viele verschiedene Elliptische Kurven, daher kann ich den Feed mit Chrome auf meinem Smartphone abrufen. Der interne URL Handler jedoch unterstützt wirklich nur die einfachste aller zulässigen Kurven, secp256r1. 

Um das Problem zu lösen, gibt es eine ganze Reihe von Möglichkeiten. Die einfachste ist neben dem Anbieten von secp256r1 serverseitig, auch die Aktivierung von alternativen Chiffren die den Diffie-Hellman-Schlüsselaustausch ohne Elliptischen Kurven verwenden. Wenn man allerdings keinen Zugriff auf den Server hat, bleibt nur der Reverse Proxy.

TLS mit ECDH und secp384r1 auf dem Huawei P9