
ejabberd/ecs
방금 우분투 20.04 aws 인스턴스에 도커 이미지를 설치하고 설정했습니다 .
포트, 도메인 이름, 사용자 설정 및 작업이 있습니다.
호스트(우분투)에서 certbot을 사용하여 Let's Encrypt 인증서를 생성하고 이를 도커 컨테이너에 복사했습니다.
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
config를 다시 로드하면 SSL을 사용하여 bin/ejabbedctl reload_config
액세스할 수 있습니다 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-----
...
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