Ssl

在埠 5222 上設置 ejabberd STARTTLS

  • May 19, 2020

我剛剛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)
---

知道我能做些什麼來解決這個問題嗎?

為了使連接安全,您需要tls: true在偵聽器中指定。例如在下面的配置中,兩個埠52225223具有相同的設置,但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_fileca_file: "/home/ejabberd/conf/cacert.pem"假設cacert.pem是由 ejabberd 安裝程序創建的文件,而不是您的 LE。

引用自:https://serverfault.com/questions/1017743