
Acabo de instalar y configurar la ejabberd/ecs
imagen 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 openssl
desde 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, starttls
y 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: true
en el oyente. Por ejemplo, en la configuración debajo, ambos puertos 5222
tienen 5223
la misma configuración, pero 5223
también incluyen tls: true
. Gracias a eso, su openssl
prueba detectará una conexión segura en el puerto 5223
pero 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_file
y ca_file: "/home/ejabberd/conf/cacert.pem"
asumir cacert.pem
que es el archivo creado por el instalador de ejabberd y no su LE.