Пришлось настраивать openfire jabber сервер. Просили использовать сертификат от Let’s Encrypt, естественно его авто обновление и добиться максимальной оценки на xmpp.org.
Описывать установку не буду. В моём случае это был CentOS 6.6, Openfire 4.0.2 был установлен из своего же пакета, оказался на разделе /opt. Java 8 используется интегрированная в пакет, находится там же.

Для получения сертификата используем LetsEncrypt.

1
/root/letsencrypt/letsencrypt-auto certonly --webroot -w /opt/ssl -d example.com

для того чтоб всё отработало нужно в конфиг виртуального хоста вэб сервера нужного домена добавить что-то такое:

1
Alias "/.well-known" "/opt/ssl/.well-known"

Сами должны разобраться.
Отключаем устаревшие шифры в файле /opt/openfire/jre/lib/security/java.security

1
2
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

1
jdk.tls.ephemeralDHKeySize=2048

или
vim /etc/default/openfire

1
2
# Additional options that are passed to the Daemon.
DAEMON_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"

А для автоматического обновления сертификата создаём следующий скрипт, который запускаем когда нужно по крону.

vim /opt/openfire/updcertopenfire.bash

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/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. Пока на этом всё.