
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"
ユーザーに安全な接続のみを使用するように要求します。
ドキュメントを読んでみると、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
と、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
補足として、それでも問題が解決しない場合は、ファイルが LE ではなく ejabberd インストーラーによって作成されたものであるca_file
とca_file: "/home/ejabberd/conf/cacert.pem"
想定して変更してみてください。cacert.pem