
Я только что установил и настроил образ Docker ejabberd/ecs
на экземпляре Ubuntu 20.04 AWS.
У меня настроены и работают порты, доменное имя и пользователи.
На хосте (ubuntu) я сгенерировал сертификаты Let's Encrypt с помощью certbot, скопировал их в контейнер Docker:
certfiles:
- /home/ejabberd/conf/fullchain.pem
- /home/ejabberd/conf/privkey.pem
ca_file: "/home/ejabberd/conf/fullchain.pem"
Я хочу потребовать от своих пользователей использовать только безопасное соединение.
Я прочитал в документации, что лучше использовать STARTTLS вместо TLS.
Проблема в том, что ejabberd, похоже, использует мои сертификаты только при настройке TLS.
Когда я устанавливаю конфигурацию следующим образом:
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
и перезагрузите конфигурацию bin/ejabbedctl reload_config
, после чего я смогу получить доступ https://example.com:5280/admin/
с помощью SSL.
И когда я тестирую сертификат openssl
с другого компьютера, он, похоже, работает, потому что я получаю следующее:
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-----
...
Но когда я использую, как я понимаю, starttls
и starttls_required
:
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls: true
starttls_required: true
Тогда ejabberd, похоже, не использует безопасное соединение на порту 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)
---
Есть идеи, что можно сделать, чтобы это исправить?
решение1
Чтобы сделать соединение безопасным, вам нужно указать tls: true
в прослушивателе. Например, в конфигурации ниже оба порта 5222
и 5223
имеют одинаковые настройки, но 5223
также включают tls: true
. Благодаря этому ваш openssl
тест обнаружит безопасное соединение на порту, 5223
но не на 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
В качестве примечания: если проблема все еще не решена, попробуйте ca_file
предположить ca_file: "/home/ejabberd/conf/cacert.pem"
, cacert.pem
что файл создан установщиком ejabberd, а не вашим LE.