web-dev-qa-db-ja.com

ポート5222でのejabberdSTARTTLSセットアップ

Docker ejabberd/ecsイメージをubuntu20.04awsインスタンスにインストールしてセットアップしました。

ポート、ドメイン名、ユーザーが設定され、機能しています。

ホスト(ubuntu)で、certbotを使用してLet's Encrypt証明書を生成し、Dockerコンテナーにコピーしました。

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

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

安全な接続のみを使用するようにユーザーに要求したい。

TLSの代わりにSTARTTLSを使用するほうがよいというドキュメントを読みました。

問題は、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をリロードすると、sslを使用してhttps://example.com:5280/admin/にアクセスできます。

また、別のマシンから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-----
...

しかし、私が使用するとき、私が理解していることから、starttlsstarttls_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
user7890

接続を安全にするには、リスナーで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_fileがLEではなくejabberdインストーラーによって作成されたファイルであると想定してca_file: "/home/ejabberd/conf/cacert.pem"cacert.pemに変更してみてください。

0
f055