25. July 2015

jabber.spline.de TLS updates

TL;DR:

Wir sind auf ejabberd Version 14.07 gewechselt und haben die TLS Einstellungen drastisch verschärft.


Jabber.ccc.de et al haben vor vor ein paar Tagen PFS TLS ciphers für server-to-server Verbindungen vorausgesetzt. Als Konsequenz hat unser Jabber-Server (Debian oldstable) sich nicht mehr mit diesen verbinden können. Wir haben diesen Umstand als Anlass genommen endlich mal zu aktualisieren und haben auch gleichzeitig unsere TLS-Einstellung angehoben. Sogar noch etwas strenger als jabber.ccc.de. Folgende Änderungen haben wir durchgeführt:

  • ejabberd auf 14.07 (Debian Jessie) aktualisiert
  • ejabberd.cfg in das neue, viel schönere ejabberd.yml konvertiert

Folgende TLS-Einstellungen sind darin enthalten:

s2s

s2s_use_starttls: required_trusted
s2s_protocol_options:
  - "no_sslv3"
  - "no_tlsv1"

s2s_ciphers: "kEDH:kEECDH:-aDSS:-3DES:-DES:-RC4:-ADH:-SHA1:-AES128"

c2s

listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    certfile: "/etc/ssl/private/jabber.spline.de.combined.pem"
    starttls: true
    starttls_required: true
    protocol_options:
      - "no_sslv3"
      - "no_tlsv1"
    ciphers: "kEDH:kEECDH:-aDSS:-3DES:-DES:-RC4:-ADH:-SHA1:-AES128"
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s

Da Port 5223 seit Jahren deprecated ist, ist er hier auch gar nicht mehr aktiviert.

Mit diesen Einstellungen erreichen wir übrigens einen perfekten Score beim XMPP IM Observatory.

Als Konsequenz sind jetzt aber einige, kleinere Jabber-Server nicht mehr erreichbar. Die MaintainerInnen müssen dort auch nachlegen und zumindest ein TLS Setup konfigurieren, dass die gelisteten PFS ciphers unterstützt. Dazu gehört:

  • TLS im Jabber Server aktivieren (ejabberd aus debian wheezy geht nicht ohne Patches)
  • valides Zertifikat (CAcert oder im Store von Debians ca-certificates)
  • der Common Name (CN) muss mit dem vHost des Jabber Servers übereinstimmen (nicht dem FQDN des Servers)
  • vermutlich SSLclient und SSLserver purpose bits im Zertifikat (StartCom unterstützt das imho nicht [1])

Zum Testen habe ich vorhandene XMPP-bezogene Patches[2,3] in den OpenSSL 1.0.2 branch gemerged[4]. Damit kann der eigene Server z.B. so getestet werden:

#!/bin/sh

jabberdomain=jabber.spline.de

for proto in xmpp-server xmpp-client ; do
    SRV=_${proto}._tcp.$jabberdomain
    [ $proto == xmpp-client ] && SSLproto=xmpp || SSLproto=xmpp-server
    for r in  $(dig -t srv $SRV +short | sed -r 's/.* ([0-9]+) (.*)./\2:\1/g') ; do
        ./apps/openssl s_client -connect $r -starttls $SSLproto -xmpphost $jabberdomain < /dev/null
    done
done

Bei Fragen meldet euch bitte am Besten an spline@spline.de

[1] https://forum.startcom.org/viewtopic.php?f=15&t=2328

[2] http://rt.openssl.org/Ticket/Display.html?id=3742

[3] http://rt.openssl.org/Ticket/Display.html?id=2860

[4] https://github.com/octomike/openssl/tree/xmpp

Tags: jabber security