summaryrefslogtreecommitdiffstats
path: root/blog/2015/07-25-jabber-tls.html
blob: b4d16492b9708c894b38c5cd111b9f371dc1a594 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
{% meta %}
  title: jabber.spline.de TLS updates
  tags: [jabber, security]
{% endmeta %}

{% mark body %}
{% filter markdown %}

TL;DR:

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

---

<a href="http://web.jabber.ccc.de">Jabber.ccc.de</a> 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](https://xmpp.net/result.php?domain=jabber.spline.de&type=client).

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](mailto: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

{% endfilter %}
{% endmark %}