
ejabberd/ecs
Ich habe gerade das Docker- Image auf einer Ubuntu 20.04 AWS-Instanz installiert und eingerichtet .
Ich habe Ports, Domänennamen und Benutzer eingerichtet und es funktioniert.
Auf dem Host (Ubuntu) habe ich mit Certbot Let’s Encrypt-Zertifikate generiert und sie in den Docker-Container kopiert:
certfiles:
- /home/ejabberd/conf/fullchain.pem
- /home/ejabberd/conf/privkey.pem
ca_file: "/home/ejabberd/conf/fullchain.pem"
Ich möchte von meinen Benutzern verlangen, nur eine sichere Verbindung zu verwenden.
Ich habe in der Dokumentation gelesen, dass ich besser STARTTLS statt TLS verwenden sollte.
Das Problem ist, dass ejabberd meine Zertifikate anscheinend nur beim Einrichten von TLS verwendet.
Wenn ich die Konfiguration wie folgt einstelle:
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
tls: true
...
-
port: 5280
ip: "::"
module: ejabberd_http
tls: true
request_handlers:
"/admin": ejabberd_web_admin
und lade die Konfiguration neu bin/ejabbedctl reload_config
, dann kann ich https://example.com:5280/admin/
per SSL zugreifen.
Und wenn ich das Zertifikat von einem anderen Computer aus teste openssl
, scheint es zu funktionieren, da ich Folgendes erhalte:
openssl s_client -connect example.com:5222
CONNECTED(00000005)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = example.com
verify return:1
---
Certificate chain
0 s:CN = example.com
i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
...
Aber wenn ich, wie ich es nach meinem Verständnis sollte, starttls
und verwende starttls_required
:
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls: true
starttls_required: true
Dann scheint ejabberd keine sichere Verbindung auf Port zu verwenden 5222
:
openssl s_client -connect example.com:5222
CONNECTED(00000005)
140324192997824:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:332:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 315 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
Irgendeine Idee, wie ich das beheben könnte?
Antwort1
Um die Verbindung sicher zu machen, müssen Sie tls: true
im Listener angeben. Beispielsweise haben in der Konfiguration unten beide Ports 5222
und 5223
dieselben Einstellungen, 5223
enthalten aber auch tls: true
. Dadurch openssl
erkennt Ihr Test eine sichere Verbindung auf Port 5223
, aber nicht auf 5222
.
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5223
ip: "::"
tls: true
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
Als Randbemerkung: Wenn das Problem weiterhin besteht, versuchen Sie bitte, ca_file
davon ca_file: "/home/ejabberd/conf/cacert.pem"
auszugehen cacert.pem
, dass die Datei vom Ejabberd-Installationsprogramm und nicht von Ihrer LE erstellt wurde.