ejabberd STARTTLS-Setup auf Port 5222

ejabberd STARTTLS-Setup auf Port 5222

ejabberd/ecsIch 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, starttlsund 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: trueim Listener angeben. Beispielsweise haben in der Konfiguration unten beide Ports 5222und 5223dieselben Einstellungen, 5223enthalten aber auch tls: true. Dadurch opensslerkennt 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_filedavon ca_file: "/home/ejabberd/conf/cacert.pem"auszugehen cacert.pem, dass die Datei vom Ejabberd-Installationsprogramm und nicht von Ihrer LE erstellt wurde.

verwandte Informationen