ejabberd и TLS v1 v1.1

После обновления ejabberd 16.01 до версии 20.01 перестали подключаться клиенты QIP и PSI через защищённое соединение. Естественно они используют TLSv1.0 и TLSv1.1

Несмотря на то, что в конфигурационном файле ejabberd.yml были закомментированы:

##- "no_tlsv1"
##- "no_tlsv1_1"

Подключения через TLSv1.0 и TLSv1.1 всё равно не работали.

Проверить типы шифрования, поддерживаемые сервисом xmpp можно с помощью https://github.com/drwetter/testssl.sh

./testssl.sh -t xmpp server-ip-or-domain-name:5222

В выводе данного скрипта фигурировало:

 TLS 1      not offered
 TLS 1.1    not offered

Помог рецепт для nginx в данной статье: https://itectec.com/ubuntu/ubuntu-enable-tls-1-0-and-tls-1-1-on-ubuntu-20-04/

Необходимо в стандартное содержимое TLS_CIPHERS добавить :@SECLEVEL=1 должно получиться вот так:

'TLS_CIPHERS': "HIGH:!aNULL:!eNULL:!3DES:@STRENGTH:@SECLEVEL=1"

Можно использовать ещё такой вариант, как в случае nginx:

'TLS_CIPHERS': "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:@SECLEVEL=1"

Перезапускаем ejabberd и проверяем testssl.sh, о чудо:

TLS 1      offered (deprecated)
TLS 1.1    offered (deprecated)

Клиенты PSI и QIP тоже стали подключаться.

Сертификат генерировал самоподписанный:

openssl req -new -x509 -nodes -newkey rsa:2048 -days 3650 -keyout privkey.pem -out server.pem -subj "/C=RU/ST=RU/L=MOSCOW/O=CK/OU=CK/CN=domain.ru/emailAddress=admin@domain.ru"

cat privkey.pem >> server.pem && rm privkey.pem && mv server.pem ejabberd.pem
chmod 640 ./ejabberd.pem
chown root:ejabberd ./ejabberd.pem

cp /etc/ejabberd/ejabberd.pem /etc/ejabberd/ejabberd.pem.old
cp ./ejabberd.pem /etc/ejabberd/ejabberd.pem

Секция ejabberd.yml целиком:

certfiles:
  - "/etc/ejabberd/ejabberd.pem"

## TLS configuration
define_macro:
  'TLS_CIPHERS': "HIGH:!aNULL:!eNULL:!3DES:@STRENGTH:@SECLEVEL=1"
  ##'TLS_CIPHERS': "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:@SECLEVEL=1"
  'TLS_OPTIONS':
    - "no_sslv3"
    ##- "no_tlsv1"
    ##- "no_tlsv1_1"
    - "cipher_server_preference"
    - "no_compression"
  ##'DH_FILE': "/etc/ejabberd/dh2048.pem"
    ## generated with: openssl dhparam -out dhparams.pem 2048

c2s_ciphers: 'TLS_CIPHERS'
s2s_ciphers: 'TLS_CIPHERS'
c2s_protocol_options: 'TLS_OPTIONS'
s2s_protocol_options: 'TLS_OPTIONS'
## c2s_dhfile: 'DH_FILE'
## s2s_dhfile: 'DH_FILE'

listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    starttls_required: false
    starttls: true
    protocol_options: 'TLS_OPTIONS'

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика