После обновления 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'