Configuración de ejabberd STARTTLS en el puerto 5222

Configuración de ejabberd STARTTLS en el puerto 5222

Acabo de instalar y configurar la ejabberd/ecsimagen de la ventana acoplable en una instancia de Ubuntu 20.04 AWS.

Tengo puertos, nombre de dominio y usuarios configurados y funcionando.

En el host (ubuntu) generé certificados Let's Encrypt con certbot, los copié en el contenedor acoplable:

certfiles:               
  - /home/ejabberd/conf/fullchain.pem
  - /home/ejabberd/conf/privkey.pem  

ca_file: "/home/ejabberd/conf/fullchain.pem"

Quiero exigir a mis usuarios que utilicen solo una conexión segura.

Leí en la documentación que será mejor que use STARTTLS en lugar de TLS.

El problema es que ejabberd parece usar mis certificados sólo cuando configura TLS.

Cuando configuro la configuración de esta manera:

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 

y recargar la configuración bin/ejabbedctl reload_config, luego puedo acceder https://example.com:5280/admin/usando ssl.

Y cuando pruebo el certificado openssldesde otra máquina, parece funcionar porque aparece lo siguiente:

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-----
...

Pero cuando uso, como debería según tengo entendido, starttlsy starttls_required:

listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    starttls: true
    starttls_required: true

Entonces ejabberd no parece utilizar una conexión segura en el puerto 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)
---

¿Alguna idea de qué podría hacer para solucionar este problema?

Respuesta1

Para que la conexión sea segura, debe especificarlo tls: trueen el oyente. Por ejemplo, en la configuración debajo, ambos puertos 5222tienen 5223la misma configuración, pero 5223también incluyen tls: true. Gracias a eso, su opensslprueba detectará una conexión segura en el puerto 5223pero no en el 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

Como nota al margen, si aún tiene problemas, intente cambiar ca_filey ca_file: "/home/ejabberd/conf/cacert.pem"asumir cacert.pemque es el archivo creado por el instalador de ejabberd y no su LE.

información relacionada