포트 5222에 ejabberd STARTTLS 설정

포트 5222에 ejabberd STARTTLS 설정

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있지만 . 덕분에 테스트에서는 포트에서는 보안 연결을 감지 하지만 에서는 감지하지 못합니다 .52235223tls: trueopenssl52235222

  -
    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

관련 정보