Пришлось настраивать openfire jabber сервер. Просили использовать сертификат от Let's Encrypt, ес-но его авто обновление и добиться максимальной оценки на xmpp.org.
Описывать установку не буду. В моём случае это был CentOS 6.6, Openfire 4.0.2 был установлен из своего же пакета, оказался на разделе /opt. Java 8 используется интегрированная в пакет, находится там же.
Для получения сертификата используем letsencrypt.
/root/letsencrypt/letsencrypt-auto certonly --webroot -w /opt/ssl -d example.com

для того чтоб всё отработало нужно в конфиг виртуального хоста вэб сервера нужного домена добавить что-то такое:
Alias "/.well-known" "/opt/ssl/.well-known"

Сами должны разобраться.
Отключаем устаревшие шифры в файле /opt/openfire/jre/lib/security/java.security
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
jdk.tls.disabledAlgorithms=SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_WITH_3DES_EDE_CBC_SHA, SSL_DH_anon_WITH_DES_CBC_SHA, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DH_DSS_WITH_DES_CBC_SHA, SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DH_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA, SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA, SSL_FORTEZZA_DMS_WITH_NULL_SHA, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_WITH_IDEA_CBC_SHA, SSL_RSA_WITH_NULL_MD5, SSL_RSA_WITH_NULL_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_DH_anon_EXPORT_WITH_RC4_40_MD5, SSL_DH_anon_WITH_RC4_128_MD5, SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, TLS_DHE_PSK_WITH_RC4_128_SHA, TLS_ECDH_anon_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA, TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, TLS_ECDHE_PSK_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_RC4_128_SHA, TLS_KRB5_EXPORT_WITH_RC4_40_MD5, TLS_KRB5_EXPORT_WITH_RC4_40_SHA, TLS_KRB5_WITH_RC4_128_MD5, TLS_KRB5_WITH_RC4_128_SHA, TLS_PSK_WITH_RC4_128_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT1024_WITH_RC4_56_SHA, TLS_RSA_PSK_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, SSLv3

Для активации 256 битных шифров нужно перейти на сайт java и скачать обновлённые файлы.
Переходим по ссылке http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
и качаем файл jce_policy-8.zip. Распаковываем содержимое в /opt/openfire/jre/lib/security/ с заменой.

Для активации 2048 DH ключа нужно в самом скрипте запуска добавить в строку запуска параметр
-Djdk.tls.ephemeralDHKeySize=2048

В человеческих системах, или когда люди больше разбираются, нужно это делать по другому
# vim /opt/openfire/jre/lib/security/java.security
jdk.tls.ephemeralDHKeySize=2048

или
# vim /etc/default/openfire
# Additional options that are passed to the Daemon.
DAEMON_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"


А для автоматического обновления сертификата создаём следующий скрипт, который запускаем когда нужно по крону.
# vim /opt/openfire/updcertopenfire.bash
#!/bin/bash

LOG=/var/log/updcertopenfire.log
# dont change password, or change it into web (default: changeit)
export PASS=changeme
P12=/tmp/.tmpcert
USER=daemon
ALIAS=example.com
KNEW=/opt/openfire/resources/security/keystore.new
KOLD=/opt/openfire/resources/security/keystore
FULL=/etc/letsencrypt/live/example.com/fullchain.pem
PRIV=/etc/letsencrypt/live/example.com/privkey.pem

echo $(date) Start update script >> $LOG
/root/letsencrypt/letsencrypt-auto renew --webroot -w /opt/ssl -d $ALIAS

openssl pkcs12 -export -password env:PASS -in $FULL -inkey $PRIV -out $P12 -name $ALIAS
keytool -importkeystore -deststorepass $PASS -destkeypass $PASS -destkeystore $KNEW -srckeystore $P12 -srcstoretype PKCS12 -srcstorepass $PASS -alias $ALIAS

rm -f $P12
cp $KOLD $KOLD.$( date "+%s" )
mv $KNEW $KOLD
chown $USER:$USER $KOLD $KOLD.*
ls -t $KOLD.*|tail -n+4|xargs -d "\n" -i rm "{}"
/etc/init.d/openfire restart

echo $(date) End update script >> $LOG

Обратите внимание на указанный пароль, после этих действий нужно будет его сменить в панели управления openfire, или в этом скрипте на пароль по умолчанию.

Так же выяснил что эта версия Openfire не может подключиться к ejabberd, если на том включено starttls required. Сообщения ejabberd -> openfire доходят, а обратно openfire -> ejabberd ничего не доходит. При этом в логах ejabberd разрешено подключение, а в логах openfire загадочные ошибки java.
По ошибке выше, скорее всего нужно в Openfire импортировать корневые сертификаты, которые используются на проблемном сервере. В моём случае это был positivessl.

Пока на этом всё.
Комментарии  
vladonvv
0 # vladonvv 15.08.2017 14:08
Все работает замечательно, но есть "но", пока не понял что не так.
Почему то два применяемых клиента - psi и kopete ругаются что им видите-ли "Не верный CA сертификат."
Кто-то сталкивался с таким?
Ответить | Ответить с цитатой | Цитировать
Гость
+4 # Гость 05.06.2017 14:40
Кругом эта CentOS, как же она достала. Семая лучшая система это Debian.
Ответить | Ответить с цитатой | Цитировать
dimetrius
0 # dimetrius 14.06.2017 12:12
Для каждой задачи есть свои инструменты.
В данном случае описывалось то, что делал именно я.
Увы, выбор ОС передо мной не стоял.

Хотя на данный момент я бы выбрал Ubuntu LTS.
Ответить | Ответить с цитатой | Цитировать
Добавить комментарий