openfire, java und ssl/tls

ohne gross darauf einzugehen warum, weshalb… einfach als gedaechtnisstuerze fuer mich.

wenn man unter debian wheezy diese beiden pakete installiert hat:

openjdk-6-jdk
openjdk-7-jre

…dann ist standardmaessig java 6 die default version. ich weiss nicht, wie man das normalerweise und richtig macht. hier musste es schnell gehen und mir ist nur eingefallen:

update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-openjdk-amd64/bin/java 1100

und so siehts dann aus, wenn man “update-alternatives –config java” aufruft:

20150220_wheezy_java

weiter gehts mit den ciphers, die java standardmaessig zur verfuegung stellt. manche sachen wie z.b. SSLv2, SSLv3, RC4 und irgendwelche “weak ciphers” will man ja nicht haben. um das abzustellen, fuegt man diese zeile (eine zeile!) in die datei /etc/java-7-openjdk/security/java.security ein bzw editiert diese, sofern schon vorhanden:

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

und da man auch keine schluessel kleiner 1024 akzeptieren will, auch noch diese zeile:

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

openjdk hats irgendwie auch nicht so mit der validierung von remote zertifikaten, weshalb das mit dem TLS dialback nicht funktioniert. deshalb muss man in der datei /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/java.security auch noch diese zeile auskommentieren: (mit einem # anfang versehen)

security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg

und dann noch die sache mit dem importieren eines von einer CA signierten zertifikates… dazu brauchts:

– das zertifikat selbst (jabber-signed.pem)
– den key (jabber-private.pem)
– die “certificate chain” der CA auch im PEM format (hier chain1.pem und chain2.pem)
– ImportKey.java von agentbob

los gehts…

in der datei “ImportKey.java” von agentbob diese zeilen den eigenen gegebenheiten anpassen:

[..]
String keypass = "changeit";
[..]
String defaultalias = "private-key";
[..]
String keystorename = "keystore";

und dann die ImportKey.java mit diesem befehl kompilieren:

javac ImportKey.java

und so fortfahren:

/etc/init.d/openfire stop
cd /etc/openfire/security
cp truststore truststore.org
cp keystore keystore.org
keytool -importcert -alias chain1 -keystore truststore -file chain1.pem
keytool -importcert -alias chain2 -keystore truststore -file chain2.pem
openssl pkcs8 -topk8 -nocrypt -in jabber-private.pem -inform PEM -out jabber-private.der -outform DER
openssl x509 -in jabber-signed.pem -inform PEM -out jabber-signed.der -outform DER
java ImportKey jabber-private.der jabber-signed.der
/etc/init.d/openfire start

in der admin webgui steht bei dem key nun “pending verification”… stimmt garnicht. hab ich einfach ignoriert. genauso wird angezeigt.. “One or more certificates are missing. Click here to generate self-signed certificates” ..stimmt auch nicht. hab ich auch einfach ignoriert.

ich denke, das wars. mit dem “IM Observatory” auf xmpp.net kann man anschliessend testen, ob nun alles so ist, wie man sich das erhofft… voila:

20150220_protocols

20150220_ciphers

Author: sd

Leave a Reply

Your email address will not be published. Required fields are marked *