Techniken: PHP, Javascript, BASH, Java
Ein Kunde von uns betreibt eine erfolgreiche Community-Chat-Webseite. Im Jahr 2018 wurde der Chat noch mit einer veralteten und schon lange nicht mehr gepflegten Java-Anwednung betrieben, auf deren Quellcode wir auch keinen Zugriff hatten. Kurz vor Weihnachten kam dann der Wunsch noch vor dem Jahresende das System unbedingt SSL-Fähig zu machen.
Der administrative Ansatz die SSL-Terminierung in einem Proxy vor der Anwendung zu machen scheitere leider an der falchlichen Anforderung, dass Moderatoren Besucher*innen anhand der IP-Adresse temporär sperren können sollten, die Anwendung dafür aber nur den IP-Header auswertete.
Mein erster Ansatz zu verscuhen die Software direkt im dekompilierten Quellcode so zu patchen, dass statt der IP-Sperren auf Basis von durchgereichten Headern (x-forwarded...) passieren würde wollte zumindest mir und zur Hilfe geeilten Kollegen nicht gelingen.
SSL-terminierung im eingebetteten Webserver erzwingen
Zum Glück war der Software ein eingebetterer Webserver (netty) als einfaches jar-Archiv beigelegt. Da Netty im Quellcode vorliegt (danke Open Source) habe ich mich dann entschieden dort die SSL-Terminierung zu machen. Dazu waren eigentlich nur zwei Schritte nötig:
- Da ich die Initalisierung von Netty aus dem proprietären Teil der Software nicht ändern konnte, habe ich den Netty angepasst, SSL per Default zu verwenden.
- Anschließend mussten nur noch die bestehenden Let’s Encrypt-Zertifikate in den Netty geladen werden (was einfacher klingt als es dann ist)
Mit den beiden recht einfachen Schritten konnte ich die Software noch mal über ein paar Jaare retten, bis sie vor wenigen Monaten durch eine kompletrt neue Lösung ersetzt wurde.