ejabberd/ecs
我刚刚在 ubuntu 20.04 aws 实例上安装并设置了 docker映像。
我已经设置好端口、域名和用户并开始工作。
在主机(ubuntu)上,我使用 certbot 生成了 Let's Encrypt 证书,并将它们复制到 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 创建。