Seit ich für die Server-zu-Server-Verbindungen (S2S) auf meinem Openfire TLS erzwinge, melden sich andere Openfire-Admins: Ihre User bekommen ein „404 remote server not found“. Nachrichten gehen nur in eine Richtung durch. Wenn die Unterhaltung einmal läuft, klappt es für eine Weile. Ein seltsamer Effekt der nicht direkt auf die Ursache schließen lässt.
Das Problem
Das Problem liegt nicht am eigenen Server und nicht am DNS. Es liegt am Java-Keystore auf der Gegenseite. Java 6 und einige Versionen von Java 7 können die Zertifikatskette nicht korrekt aufbauen, wenn das Intermediate-Zertifikat der CA fehlt. Mein Server sendet es zwar mit, aber Java ignoriert es und versucht die Kette allein aus dem lokalen Truststore zu bauen.
Im warn.log des betroffenen Openfire findet man dann:
org.jivesoftware.openfire.server.ServerDialback - Error verifying key of remote server: jabber.kernel-error.de org.jivesoftware.openfire.server.ServerDialback - ServerDialback: OS - Ignoring unexpected answer in validation
Die Lösung: Intermediate-Zertifikat importieren
Der Admin des betroffenen Openfire muss das Intermediate-Zertifikat der CA in den Java-Truststore importieren. Auf einem Debian-System:
cd /etc/openfire/security/ /etc/init.d/openfire stop # Intermediate-Zertifikat der CA herunterladen wget "https://example-ca.com/intermediate.crt" # In den Truststore importieren keytool -import -keystore truststore -alias ca-intermediate -file intermediate.crt # Passwort: changeit (Java-Default) /etc/init.d/openfire start
Das Prinzip gilt für jede CA. Das Intermediate-Zertifikat von der Webseite der CA herunterladen und mit keytool in den Truststore importieren. Falls das Zertifikat bereits vorhanden ist, meldet keytool das und man kann den Import überspringen.
Prüfen ob die Kette stimmt
Mit openssl lässt sich prüfen ob der Server das Intermediate-Zertifikat korrekt ausliefert:
openssl s_client -showcerts -connect jabber.example.com:5222 -starttls xmpp
Entscheidend ist die letzte Zeile der Ausgabe:
Verify return code: 0 (ok)
Steht dort etwas anderes, fehlt ein Zertifikat in der Kette oder das Intermediate-Zertifikat wird nicht mitgesendet. In dem Fall muss der Serverbetreiber seine Zertifikatskonfiguration in Openfire prüfen.
Wer schon dabei ist die TLS-Konfiguration anzufassen: Im Beitrag zu unsicheren Ciphern und Protokollen in Openfire steht wie man die veralteten Algorithmen loswird.
Fragen? Einfach melden.

















