Wenn man Java-Programme schreibt, die zum Beispiel REST APIs oder Web Services TLS-geschützt aufrufen wollen und der Server mit einem unserer Zertifikate ausgestattet ist, dann sollte die JVM auch unseren Zertifikaten vertrauen, damit es einfach klappt.
Das zeige ich hier anhand einer JVM der Version 8, so wie sie in einem aktuellen Domino V11-Server läuft, aber der Vorgang lässt sich leicht auf andere Versionen übertragen.
Der Standard-Keystore einer JVM ist in der Datei {JVM-Pfad}/lib/security
. Bei Java liegt mit keytool
das passende Werkzeug bei, um den Schlüsselspeicher zu verwalten, u.a. um neue Zertifikate zu importieren. Das Standard-Kennwort beim Java-Keystore ist: changeit
Beispiel hier: Die JVM eines Domino V11-Servers unter Linux unter /opt/hcl
, die Zertifikate liegen unter /local/assono-ca
.
Zertifikate importieren
Zunächst importieren wir das Root-Zertifikat:
cd /opt/hcl/domino/notes/latest/linux/jvm
bin/keytool -trustcacerts -keystore lib/security/cacerts -import -alias assono -file /local/assono-ca/root/assono-cert.pem
Geben Sie das Schlüsselspeicherkennwort ein:
Eigner: EMAILADDRESS=tbahn@assono.de, CN=assono, O=assono GmbH, L=Schnwentinental, ST=Schleswig-Holstein, C=DE
Aussteller: EMAILADDRESS=tbahn@assono.de, CN=assono, O=assono GmbH, L=Schnwentinental, ST=Schleswig-Holstein, C=DE
Seriennummer: 6c9058673ba9438d10151a2cbd42b224955a5924
Gültig von: 07.07.20 11:35 bis: 02.07.40 11:35
Fingerabdrücke des Zertifikats:
MD5: 01:23:EC:E0:C4:38:59:07:5C:45:71:9F:A4:CA:37:B9
SHA1: 1B:5D:DB:16:7B:51:8D:DF:D2:20:84:44:42:A8:B5:01:55:B2:0B:61
SHA256: E5:49:5A:B2:34:03:C1:DA:51:0F:6F:D8:59:6A:34:F4:91:10:A9:3E:92:CA:4E:EF:DE:32:EB:FB:0B:B0:BA:4C
Signaturalgorithmusname: SHA256withRSA
Version: 3
Erweiterungen:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 41 aa 79 f1 2e af 42 10 11 bb 33 8b 32 da a8 b5 A.y...B...3.2...
0010: 49 64 f6 43 Id.C
]
]
#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 41 aa 79 f1 2e af 42 10 11 bb 33 8b 32 da a8 b5 A.y...B...3.2...
0010: 49 64 f6 43 Id.C
]
]
#3: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]
Soll dieses Zertifikat anerkannt werden? [nein]: ja
Das Zertifikat wurde im Schlüsselspeicher hinzugefügt.
Dann das Intermediate-CA-Zertifikat:
bin/keytool -trustcacerts -keystore lib/security/cacerts -import -alias servers.assono -file /local/assono-ca/servers/servers-cert.pem
Geben Sie das Schlüsselspeicherkennwort ein:
Das Zertifikat wurde im Schlüsselspeicher hinzugefügt.
Und wie üblich noch einmal kontrollieren:
bin/keytool -keystore lib/security/cacerts -list
Geben Sie das Schlüsselspeicherkennwort ein:
Schlüsselspeichertyp: jks
Schlüsselspeicherprovider: IBMJCE
Der Schlüsselspeicher enthält Einträge 92
[…]
servers.assono, 07.07.2020, trustedCertEntry,
Elektronischer Fingerabdruck des Zertifikats (SHA1): 26:A9:DA:0C:54:FC:71:14:CF:34:96:F3:C6:6A:6E:14:29:04:46:1A
[…]
assono, 07.07.2020, trustedCertEntry,
Elektronischer Fingerabdruck des Zertifikats (SHA1): 1B:5D:DB:16:7B:51:8D:DF:D2:20:84:44:42:A8:B5:01:55:B2:0B:61
[…]
Der Keystore der JVM enthielt schon vor unseren Importen 90 Zertifikate, und um die beiden neuen zu finden, darf man etwas suchen.
In der nächsten Folge geht es dann um den Sametime Proxy Server, der auf einem Apache HTTP Server basiert. Auch dort werden wir das keytool
wieder benutzen, aber diesmal werden wir damit einen neuen Schlüssel und einen CSR erstellen, und kommen dann auf openssl
zum Signieren zurück.