====== SSL für Java-basierte Dienste: Java Keystore ======
Setups mit Java-basierten Diensten sehen häufig ähnlich aus:
* Java-Dienst z.B. basierend auf Tomcat (oder Jetty), lauschender Port auf > 1024 (z.B. 8443)
* Apache Reverse Proxy, der stellvertretend auf Port 80 und 443 lauscht
* das Zertifikat im Apache ist ein gültiges Zertifikat (z.B. aus der DFN PKI)
* die Verbindung zwischen Reverse Proxy und Tomcat ist auch SSL gesichert (weil die Applikationen meistens auch SSL erzwingen)
* das Zertifikat im Tomcat kann selbstsigniert sein, sollte aber *nicht abgelaufen** sein
===== Keystore =====
Die SSL-Zertifikate unter Java werden in einem besonderen Keystore verschlüsselt gespeichert. Darin liegen sowohl die Private Keys als auch die Zertifikate.
* wenn man nichts anderes angibt, wird ~/.keystore verwendet
* der Keystore hat ein äußeres Passwort (Keystore password) und ein inneres (Truststore password)
* default für tomcat: "changeit"
* Zertifikate werden mit einem Alias gespeichert
* default für tomcat: tomcat
==== 1. Zertifikat ====
Siehe [[https://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-using-java-keytool.html]]
keytool -genkey -keyalg RSA -alias tomcat -storepass -validity 730 -keysize 2048
==== Zertifikat erneuern ====
keytool -selfcert -alias tomcat -validity 1825
==== Zertifikat anzeigen ====
keytool -list -v
Keytool Doku: [[http://docs.oracle.com/javase/8/docs/technotes/tools/unix/keytool.html]]
===== Jetty =====
Jetty speichert mittlerweile die Keystore Passwörter obfuscated in der config, siehe [[http://wiki.eclipse.org/Jetty/Howto/Secure_Passwords]].
Python-Skript zum De-obfuscaten:
# Jetty Deobfuscation Tool
import sys
def d_jetty(ct):
pt = ""
b = bytearray(len(ct)/4)
i=0
for x in b:
t = ct[i:i+4]
i0 = int(t,36)
i1 = i0 / 256
i2 = i0 % 256
x = (i1+i2-254)/2
pt+=chr(x)
i+=4
return pt
if (len(sys.argv) == 2):
raw_ct = sys.argv[1]
else:
print "Jetty Deobfuscation Tool v1.0"
print "./jdt "
exit(0)
print d_jetty(raw_ct)
Quelle: [[http://stackoverflow.com/questions/8883951/passwords-in-ssl-with-jetty-tutorial]]