Sichere Verbindung (TLS/HTTPS)
Für einen sicheren Betrieb des BPC sollten möglichst nur gesicherte Verbindungen genutzt werden.
Für die korrekte Konfiguration sind Kenntnisse über TLS im Allgemeinen und der Konfiguration von Java basierten Anwendungen mit Truststore und Keystore nötig.
Zur Kommunikation mit OpenSearch wird seit BPC 4.1.9 bzw. 4.2.0 in der Voreinstellung HTTPS (Port 9200) verwendet.
Für die allgemeine Netzwerkkonfiguration des BPC sei auf Netzwerk verwiesen.
In produktiven Umgebungen sollten mindestens die eingehenden Verbindungen durch ein eigenes Zertifikat abgesichert werden. Dies ist im Abschnitt Eingehende Verbindungen mit eigenem Zertifikat absichern beschrieben. |
Übersicht der BPC Netzwerkverbindungen
In diesen Grafiken sind die Netzwerkverbindungen für das BPC im Single Node und Cluster Betrieb zu sehen.
An den Verbindungen ist stets der verwendete Netzwerk-Port hinter dem Doppelpunkt angegeben.
So wird zum Beispiel bei Netzwerk-Ports können auch abweichend konfiguriert werden. Siehe dazu Netzwerk. |
Die Netzwerkverbindungen lassen sich in externe bzw. eingehende Verbindungen (siehe Eingehende Verbindungen mit eigenem Zertifikat absichern) und interne Verbindungen (Interne Verbindungen mit eigenem Zertifikat absichern) unterscheiden. Diese lassen sich getrennt voneinander konfigurieren.
Allgemeine Informationen zur Netzwerkkonfiguration finden Sie unter Netzwerk.
Keystores und Truststores
Keystores und Truststores sind wichtige Dateien, für die Konfiguration von TLS.
In den Keystores sind nicht öffentliche Zertifikate (Private Key) enthalten. Diese werden entweder als Server-Zertifikat genutzt, um TLS/HTTPS Verbindungen anzubieten oder als Client-Zertifikat, um sich bei Verwendung von Mutual TLS authentication (mTLS) gegenüber des Servers zu authentifizieren. Diese Zertifikate sind sensible Informationen. Daher sind sie in der Regel durch Passwörter geschützt.
In den Truststores sind öffentliche Zertifikate (Public Key) enthalten. Damit ist es möglich beim Aufbau einer gesicherten Verbindung gegen einen Server die Authentizität des Servers sicherzustellen. Bei der Verwendung von mTLS kann man die Authentizität des Clients verifizieren, der die Verbindung aufbaut.
Diese beiden Dateien werden im Karaf, wie auch im OpenSearch genutzt, um verschiedene Verbindungen abzusichern.
Für die Erstellung von Zertifikaten und dem Arbeiten mit den Keystore/Truststore-Dateien können die Kommandozeilentools |
Keystore und Truststore Dateien zentralisieren
Es wird empfohlen die Keystore- und Truststore-Dateien außerhalb vom Karaf und OpenSearch, an einer zentralen Stelle, abzulegen. Dies erleichtert zukünftige Updates, da so OpenSearch und Karaf aktualisiert werden können, ohne dass die Konfiguration von TLS wiederholt werden muss.
Standardort Karaf |
|
Standardort OpenSearch |
|
Empfohlener neuer Ort |
|
Die bpc.env ist so anzupassen, dass der Karaf die Dateien findet und für OpenSearch ein passender Link angelegt wird. Der Link für OpenSearch ist leider nötig, da der Prozess nicht auf Dateien außerhalb seines Ordners zugreifen darf.
export ORG_OPS4J_PAX_WEB_ORG_OPS4J_PAX_WEB_SSL_KEYSTORE=../ssl/virtimo_keystore.jks
export ORG_OPS4J_PAX_WEB_ORG_OPS4J_PAX_WEB_SSL_TRUSTSTORE=../ssl/virtimo_truststore.jks
cd opensearch/config/virtimo && ln -s ../../../ssl ssl
SET ORG_OPS4J_PAX_WEB_ORG_OPS4J_PAX_WEB_SSL_KEYSTORE=../ssl/virtimo_keystore.jks
SET ORG_OPS4J_PAX_WEB_ORG_OPS4J_PAX_WEB_SSL_TRUSTSTORE=../ssl/virtimo_truststore.jks
rmdir /s opensearch\config\virtimo\ssl && mklink /J opensearch\config\virtimo\ssl ssl
Für die Erstellung des Symlinks unter Windows sind Administrator-Rechte nötig. |
Beachten Sie, dass bei dieser Konfiguration OpenSearch und Karaf dieselben Keystore und Truststore Dateien nutzen. Das bedeutet, dass darin alle nötigen Zertifikate mit den passenden Aliases abgelegt sein müssen, die für beide Systemkomponenten nötig sind.
Java Truststore cacerts
Jede Java-Installation enthält einen Default Truststore mit dem Dateinamen cacerts
.
Dieser Truststore enthält alle root CAs, die der Distributor der Java-Installation für relevant hält.
Theoretisch können alle öffentlichen Zertifikate auch nur dort abgelegt werden.
Wir raten jedoch davon ab, da auch Java selbst regelmäßig aktualisiert werden muss.
In diesem Fall müsste die cacerts Datei aus der alten Installation übernommen oder die neue cacerts angepasst werden.
Dies ist ein potenzielles Fehlerrisiko und unnötiger Aufwand.
Auslieferungszustand
Das BPC wird im Auslieferungszustand bereits mit vorkonfigurierten Keystores (virtimo_keystore.jks
) und Truststores (virtimo_truststore.jks
) ausgestattet.
Diese enthalten selbst signierte Zertifikate und sind im OpenSearch (opensearch/config/virtimo/ssl
) und Karaf (karaf/etc/virtimo/ssl
) hinterlegt.
Die Dateien sind in beiden Ordnern identisch, auch wenn dies nicht zwingend nötig wäre.
Script mit dem der default Keystore und Truststore erstellt wurden
#!/bin/sh
mkdir certs && cd certs
# ---------------------------------------------------------------------
# ROOT Zertifikat, hat eine Gültigkeitsdauer von 10 Jahren (~ 3650 Tage)
# ----------------------------------------------------------------------
openssl genrsa -out root-ca-key.pem 2048
openssl req \
-new \
-x509 \
-sha256 \
-key root-ca-key.pem \
-subj "/DC=com/DC=example/O=Example Com Inc./OU=Example Com Inc. Root CA/CN=Example Com Inc. Root CA" \
-addext "basicConstraints = critical,CA:TRUE" \
-addext "keyUsage = critical, digitalSignature, keyCertSign, cRLSign" \
-addext "subjectKeyIdentifier = hash" \
-addext "authorityKeyIdentifier = keyid:always,issuer:always" \
-days 3650 \
-out root-ca.pem
#openssl pkcs12 -export \
# -name root-ca \
# -in root-ca.pem \
# -inkey root-ca-key.pem \
# -out root-ca.p12 \
# -password pass:virtimo
keytool -import \
-file root-ca.pem \
-alias root-ca \
-keystore virtimo_truststore.jks \
-storepass virtimo \
-noprompt
# -------------------------------------------------
# Für den Jetty/Karaf/PAX Web mit dem Alias 'karaf'
# -------------------------------------------------
openssl genrsa -out karaf-key-temp.pem 2048
openssl pkcs8 \
-inform PEM \
-outform PEM \
-in karaf-key-temp.pem \
-topk8 \
-nocrypt \
-v1 PBE-SHA1-3DES \
-out karaf-key.pem
openssl req \
-new \
-key karaf-key.pem \
-subj "/C=DE/L=Berlin/O=Virtimo AG/OU=karaf/CN=karaf.example.com" \
-out karaf.csr
cat > karaf.extfile << EOF
subjectAltName = DNS:karaf.example.com, DNS:localhost, IP:::1, IP:127.0.0.1
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
basicConstraints = critical,CA:FALSE
EOF
openssl x509 \
-req \
-in karaf.csr \
-out karaf.pem \
-CA root-ca.pem \
-CAkey root-ca-key.pem \
-CAcreateserial \
-days 3650 \
-extfile karaf.extfile
openssl pkcs12 -export \
-name karaf \
-in karaf.pem \
-inkey karaf-key.pem \
-out karaf.p12 \
-password pass:virtimo
keytool \
-importkeystore \
-destkeystore virtimo_keystore.jks \
-deststoretype jks \
-deststorepass virtimo \
-srckeystore karaf.p12 \
-srcstoretype pkcs12 \
-srcstorepass virtimo \
-alias karaf
rm karaf.csr
rm karaf.extfile
# -------------------------------------------------------
# Für den OpenSearch Node mit dem Alias 'opensearch_node'
# -------------------------------------------------------
openssl genrsa -out opensearch_node-key-temp.pem 2048
openssl pkcs8 \
-inform PEM \
-outform PEM \
-in opensearch_node-key-temp.pem \
-topk8 \
-nocrypt \
-v1 PBE-SHA1-3DES \
-out opensearch_node-key.pem
openssl req \
-new \
-key opensearch_node-key.pem \
-subj "/C=DE/L=Berlin/O=Virtimo AG/OU=node/CN=node-0.example.com" \
-out opensearch_node.csr
cat > opensearch_node.extfile << EOF
subjectAltName = RID:1.2.3.4.5.5, DNS:node-0.example.com, DNS:localhost, IP:::1, IP:127.0.0.1
keyUsage = digitalSignature, nonRepudiation, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
basicConstraints = critical,CA:FALSE
EOF
openssl x509 \
-req \
-in opensearch_node.csr \
-out opensearch_node.pem \
-CA root-ca.pem \
-CAkey root-ca-key.pem \
-CAcreateserial \
-days 3650 \
-extfile opensearch_node.extfile
openssl pkcs12 -export \
-name opensearch_node \
-in opensearch_node.pem \
-inkey opensearch_node-key.pem \
-out opensearch_node.p12 \
-password pass:virtimo
keytool \
-importkeystore \
-destkeystore virtimo_keystore.jks \
-deststoretype jks \
-deststorepass virtimo \
-srckeystore opensearch_node.p12 \
-srcstoretype pkcs12 \
-srcstorepass virtimo \
-alias opensearch_node
rm opensearch_node.csr
rm opensearch_node.extfile
# ---------------------------------------------------------
# Für den OpenSearch ADMIN mit dem Alias 'opensearch_admin'
# ---------------------------------------------------------
openssl req \
-new \
-newkey rsa:2048 \
-keyout opensearch_admin-key.pem \
-out opensearch_admin.csr \
-nodes \
-subj "/C=DE/L=Berlin/O=Virtimo AG/OU=Dev/CN=opensearch_admin"
cat > opensearch_admin.extfile << EOF
basicConstraints = critical,CA:FALSE
keyUsage = critical,digitalSignature,nonRepudiation,keyEncipherment
extendedKeyUsage = critical,clientAuth
authorityKeyIdentifier = keyid,issuer:always
subjectKeyIdentifier = hash
EOF
openssl x509 \
-req \
-in opensearch_admin.csr \
-CA root-ca.pem \
-CAkey root-ca-key.pem \
-CAcreateserial \
-out opensearch_admin.pem \
-days 3650 \
-extfile opensearch_admin.extfile
#openssl pkcs12 -export \
# -name opensearch_admin \
# -in opensearch_admin.pem \
# -inkey opensearch_admin-key.pem \
# -out opensearch_admin.p12 \
# -password pass:virtimo
rm opensearch_admin.csr
rm opensearch_admin.extfile
# ----------------------------------------------------------------------------------------
# Für den OpenSearch BPC User mit dem Alias 'bpc'. Karaf / OpenSearch Client -> OpenSearch
# Unser OpenSearch ist so konfiguriert, dass der Wert aus CN (= bpc) der Username ist.
# ----------------------------------------------------------------------------------------
openssl req \
-new \
-newkey rsa:2048 \
-keyout opensearch_bpc-key.pem \
-out opensearch_bpc.csr \
-nodes \
-subj "/C=DE/L=Berlin/O=Virtimo AG/OU=client/CN=bpc"
cat > opensearch_bpc.extfile << EOF
basicConstraints = critical,CA:FALSE
keyUsage = critical,digitalSignature,nonRepudiation,keyEncipherment
extendedKeyUsage = critical,clientAuth
authorityKeyIdentifier = keyid,issuer:always
subjectKeyIdentifier = hash
EOF
openssl x509 \
-req \
-in opensearch_bpc.csr \
-CA root-ca.pem \
-CAkey root-ca-key.pem \
-CAcreateserial \
-out opensearch_bpc.pem \
-days 3650 \
-extfile opensearch_bpc.extfile
openssl pkcs12 -export \
-name opensearch_bpc \
-in opensearch_bpc.pem \
-inkey opensearch_bpc-key.pem \
-out opensearch_bpc.p12 \
-password pass:virtimo
keytool \
-importkeystore \
-destkeystore virtimo_keystore.jks \
-deststoretype jks \
-deststorepass virtimo \
-srckeystore opensearch_bpc.p12 \
-srcstoretype pkcs12 \
-srcstorepass virtimo \
-alias opensearch_bpc
rm opensearch_bpc.csr
rm opensearch_bpc.extfile
Keystore virtimo_keystore.jks
Das Standardpasswort für den Keystore virtimo_keystore.jks
ist virtimo
.
Folgende Keys/Zertifikate befinden sich im Keystore virtimo_keystore.jks
.
Alias | Passwort | Verwendungszweck |
---|---|---|
|
Server-Zertifikat für externe Verbindungen ( |
|
|
Client-Zertifikat für die Verbindung Karaf → OpenSearch ( Siehe auch Zertifikate für mTLS Authentifizierung mit OpenSearch. |
|
|
Client-Zertifikat für die Verbindung OpenSearch → OpenSearch ( |
Keystore Konfiguration im Karaf
In der karaf/etc/org.ops4j.pax.web.cfg
wird der Keystore über folgende Einstellungen referenziert.
karaf/etc/org.ops4j.pax.web.cfg
org.ops4j.pax.web.ssl.keystore = ${karaf.etc}/virtimo/ssl/virtimo_keystore.jks
org.ops4j.pax.web.ssl.keystore.password = virtimo
org.ops4j.pax.web.ssl.keystore.type = JKS
Außerdem wird hier das Zertifikat definiert, das für TLS/HTTPS (TLS extern (:8282)
) benötigt wird.
karaf/etc/org.ops4j.pax.web.cfg
# TLS Keys
org.ops4j.pax.web.ssl.key.alias = karaf
org.ops4j.pax.web.ssl.key.password = virtimo
Die Einstellung |
Für Karaf ist es zwingend erforderlich, dass das Keystore Passwort und das Passwort für den ssl.key übereinstimmt. Andernfalls kommt es zu nicht nachvollziehbaren Problemen. |
Für den Zugriff auf das Client-Zertifikat, für die Verbindung zum OpenSearch (mTLS intern (:9200)
und mTLS intern (:9203)
), sind weitere Konfigurationsparameter in der Datei karaf/etc/de.virtimo.bpc.core.cfg
(siehe auch BPC Konfigurationsdatei) vorhanden.
karaf/etc/de.virtimo.bpc.core.cfg
de.virtimo.bpc.core.opensearch.privatekey.alias = opensearch_bpc
de.virtimo.bpc.core.opensearch.privatekey.password = virtimo
Keystore Konfiguration in OpenSearch
In der opensearch/config/opensearch.yml
wird der Keystore über folgende Einstellungen referenziert:
opensearch/config/opensearch.yml
für mTLS intern (:9200)
und mTLS intern (:9203)
plugins.security.ssl.http.keystore_filepath: virtimo/ssl/virtimo_keystore.jks
plugins.security.ssl.http.keystore_password: virtimo
plugins.security.ssl.http.keystore_alias: opensearch_node
plugins.security.ssl.http.keystore_type: jks
plugins.security.ssl.http.keystore_keypassword: virtimo
opensearch/config/opensearch.yml
für mTLS intern (:9300)
plugins.security.ssl.transport.keystore_filepath: virtimo/ssl/virtimo_keystore.jks
plugins.security.ssl.transport.keystore_password: virtimo
plugins.security.ssl.transport.keystore_alias: opensearch_node
plugins.security.ssl.transport.keystore_type: jks
plugins.security.ssl.transport.keystore_keypassword: virtimo
Weitere Informationen sind in der offiziellen OpenSearch Dokumentation zu finden.
Truststore virtimo_truststore.jks
Das Standardpasswort für den Truststore virtimo_truststore.jks
ist virtimo
.
Folgende Keys/Zertifikate befinden sich im Truststore virtimo_truststore.jks
.
Alias |
Passwort |
Verwendungszweck |
|
Server-Zertifikat für externe Verbindungen ( |
Ist das vertrauenswürdige Root-Zertifikat, mit dem die anderen Zertifikate signiert wurden.
Es wird zur Ausführung der OpenSearch Security Tools wie dem |
Truststore Konfiguration in Karaf
In der karaf/etc/org.ops4j.pax.web.cfg
wird der Truststore über folgende Einstellungen referenziert:
org.ops4j.pax.web.ssl.truststore = ${karaf.etc}/virtimo/ssl/virtimo_truststore.jks
org.ops4j.pax.web.ssl.truststore.password = virtimo
org.ops4j.pax.web.ssl.truststore.type = JKS
Truststore Konfiguration in OpenSearch
In der opensearch/config/opensearch.yml
wird der Truststore über folgende Einstellungen referenziert:
opensearch/config/opensearch.yml
# mTLS intern (:9200) / mTLS intern (:9203)
plugins.security.ssl.http.truststore_filepath: virtimo/ssl/virtimo_truststore.jks
plugins.security.ssl.http.truststore_password: virtimo
plugins.security.ssl.http.truststore_type: jks
# not set means all certificates in the truststore are trusted
# plugins.security.ssl.http.truststore_alias
# mTLS intern (:9300)
plugins.security.ssl.transport.truststore_filepath: virtimo/ssl/virtimo_truststore.jks
plugins.security.ssl.transport.truststore_password: virtimo
plugins.security.ssl.transport.truststore_type: jks
# not set means all certificates in the truststore are trusted
# plugins.security.ssl.transport.truststore_alias
Weitere Informationen sind in der offiziellen OpenSearch Dokumentation zu finden.
Aliase
Wenn Sie andere Aliase nutzen wollen, als sie im Auslieferungszustand genutzt werden (siehe Keystore Aliase und Truststore Aliase), beachten Sie unbedingt auch die entsprechenden Alias-Konfigurationen in OpenSearch (Truststore, Keystore) und Karaf (Truststore, Keystore).
Aliase im Truststore sind in der Regel nicht relevant, da alle Zertifikate als Vertrauenswürdig gelten. Im OpenSearch kann man dies jedoch auch auf einen Alias eingrenzen (Truststore Konfiguration in OpenSearch). Im Auslieferungszustand wird allen Zertifikaten im Truststore vertraut.
Eingehende Verbindungen mit eigenem Zertifikat absichern
Der Zugriff auf das BPC geht über die Systemkomponente Karaf und erfolgt auf dem Port 8282 (siehe auch Netzwerk). Diese sind im Diagramm(Übersicht der BPC Netzwerkverbindungen) als TLS extern (:8282)
deklariert.
Um ein eigenes Zertifikat zu hinterlegen, muss der default Keystore (Keystore virtimo_keystore.jks
) angepasst oder ersetzt werden.
Sie benötigen:
-
TLS-Zertifikat unterschrieben vom Root-Zertifikat
Sie müssen folgende Punkte anpassen:
-
Fügen sie dem Keystore
virtimo_keystore.jks
im Karaf das TLS-Zertifikat hinzu -
Konfigurieren Sie in der
karaf/etc/org.ops4j.pax.web.cfg
den Alias und das Passwort des TLS-Zertifikats.Ausschnitt der TLS-Zertifikats Konfiguration auskaraf/etc/org.ops4j.pax.web.cfg
# TLS Keys org.ops4j.pax.web.ssl.key.alias = karaf org.ops4j.pax.web.ssl.key.password = virtimo
-
Starten Sie Karaf neu
Damit die Verbindung TLS extern (:8282)
korrekt funktioniert, müssen alle Systeme die eine Verbindung aufbauen (Browser, Server, etc.) dem Root-Zertifikat vertrauen.
Sollten Sie den Keystore ersetzen, dann müssen Sie zusätzlich das Client-Zertifikat (Default Alias opensearch_bpc
) hinzufügen.
Siehe dazu auch Interne Verbindungen mit eigenem Zertifikat absichern.
Es ist zwingend erforderlich, dass das Keystore Passwort ( |
Achten Sie darauf, dass der HTTP Port (Default 8181) abgeschaltet wird, sobald die HTTPS Verbindung eingerichtet wurde. Siehe Netzwerk |
Interne Verbindungen mit eigenem Zertifikat absichern
Für den Betrieb des BPC baut der Karaf eine gesicherte Verbindung zu OpenSearch (mTLS intern (:9200)
) und eine Websocket Verbindung zum BPC OpenSearch Plugin (mTLS intern (:9203)
) auf.
Sollten Sie das BPC im Cluster betreiben, dann bauen die OpenSearch Knoten ebenfalls Verbindungen untereinander auf (mTLS intern (:9300)
).
Bei den internen Verbindungen kommt Mutual TLS authentication (mTLS) zum Einsatz.
Das bedeutet, dass hier zusätzlich der Client, der die Verbindung aufbaut, ein Zertifikat zur Authentifizierung benötigt und der Server ein Zertifikat zur Verifikation des Client-Zertifikates.
Das Client-Zertifikat wird im Keystore virtimo_keystore.jks
hinterlegt.
Das Zertifikat zum Verifizieren wird im Truststore virtimo_truststore.jks
hinterlegt.
Die betrifft Karaf bei der Verbindung zum OpenSearch (mTLS intern (:9200)
und mTLS intern (:9203)
) und OpenSearch bei der Verbindung mit anderen OpenSearch Knoten (mTLS intern (:9300)
).
Es gibt einiges zu beachten, wenn Sie die bestehenden Zertifikate durch eigene Zertifikate ersetzen wollen. Da mTLS zum Einsatz kommt, benötigen sie zum einen das Client-Zertifikat (siehe Zertifikate für mTLS Authentifizierung mit OpenSearch) und ein Zertifikat, mit dem das Client-Zertifikat verifiziert werden kann. Dies ist in der Regel direkt von der root CA (Certificate Authority) ausgestellt.
Sie benötigen:
-
Root-Zertifikat zum Validieren ausgestellter Zertifikate
-
Client-Zertifikat unterschrieben vom Root-Zertifikat
-
TLS-Zertifikat unterschrieben vom Root-Zertifikat
Sie müssen folgende Punkte anpassen:
-
Fügen sie dem Keystore
virtimo_keystore.jks
im Karaf das Client-Zertifikat hinzu -
Fügen sie dem Keystore
virtimo_keystore.jks
im OpenSearch das TLS-Zertifikat hinzu -
Fügen Sie im Truststore
virtimo_truststore.jks
von OpenSearch und Karaf das Root-Zertifikat zum Verifizieren des Client-Zertifikates hinzu. -
Konfigurieren Sie in der Datei
karaf/etc/de.virtimo.bpc.core.cfg
den entsprechenden Alias und das zugehörige Passwort des hinzugefügten Client-Zertifikates (siehe auch BPC Konfigurationsdatei)Ausschnitt der Keystore Konfiguration auskaraf/etc/de.virtimo.bpc.core.cfg
de.virtimo.bpc.core.opensearch.privatekey.alias = opensearch_bpc de.virtimo.bpc.core.opensearch.privatekey.password = virtimo
-
Konfigurieren Sie in der Datei
opensearch/config/opensearch.yml
den entsprechenden Alias und das zugehörige Passwort des hinzugefügten TLS-Zertifikates.Ausschnitt der Keystore Konfiguration ausopensearch/config/opensearch.yml
fürmTLS intern (:9200)
undmTLS intern (:9203)
plugins.security.ssl.http.keystore_filepath: virtimo/ssl/virtimo_keystore.jks plugins.security.ssl.http.keystore_password: virtimo plugins.security.ssl.http.keystore_alias: opensearch_node plugins.security.ssl.http.keystore_type: jks plugins.security.ssl.http.keystore_keypassword: virtimo
-
Starten Sie Karaf und OpenSearch neu.
Sollten Sie ein OpenSearch Cluster verwenden, sollten Sie auch die Verbindung zwischen den Cluster Nodes (mTLS inter (:9300)
) absichern.
Wir gehen im folgenden davon aus, dass das gleiche Root-Zertifikat zum Einsatz kommt.
Sie benötigen:
-
Client-Zertifikat unterschrieben vom Root-Zertifikat
Sie müssen folgende Punkte anpassen:
-
Fügen sie dem Keystore
virtimo_keystore.jks
im OpenSearch das Client-Zertifikat hinzu -
Konfigurieren Sie in der Datei
opensearch/config/opensearch.yml
den entsprechenden Alias und das zugehörige Passwort des hinzugefügten Client-Zertifikates.Ausschnitt der Keystore Konfiguration ausopensearch/config/opensearch.yml
fürmTLS intern (:9300)
plugins.security.ssl.transport.keystore_filepath: virtimo/ssl/virtimo_keystore.jks plugins.security.ssl.transport.keystore_password: virtimo plugins.security.ssl.transport.keystore_alias: opensearch_node plugins.security.ssl.transport.keystore_type: jks plugins.security.ssl.transport.keystore_keypassword: virtimo
-
Starten Sie Karaf und OpenSearch neu.
Achten Sie immer auf die korrekte Angabe der verwendeten Aliase und Passwörter. |
Zertifikate für mTLS Authentifizierung mit OpenSearch
In dem Zertifikateintrag steckt auch der Name des Benutzers drin, welcher auf OpenSearch zugreift.
Der Wert im Feld Antragsteller
ist z.B. für das Zertifikat mit dem Alias opensearch_bpc
auf CN=bpc,OU=client,O=Virtimo AG,L=Berlin,C=DE
gesetzt.
Dabei wird vom OpenSearch Security Plugin der CN-Wert (bpc
) als Benutzer für die Zugriffe verwendet.
Der Benutzer bpc
findet sich dementsprechend auch in OpenSearch wieder.
In der Konfigurationsdatei opensearch/config/opensearch-security/roles_mapping.yml
ist der Benutzer bpc
der Rolle all_access
zugeordnet.
Weitere Informationen finden Sie auch in der offiziellen OpenSearch Dokumentation.
Das OpenSearch Security Plugin stellt die Funktionalitäten zur Verfügung. Die umfangreichen Konfigurationsmöglichkeiten sind in der OpenSearch Security Dokumention nachzulesen.
Temporäres aktivieren von HTTP zwischen Karaf und OpenSearch
Um andere Probleme auszuschliessen, kann die Verbindung temporär wieder auf HTTP umgestellt werden. Hier die notwendigen Schritte für OpenSearch und Karaf. Nach den Anpassungen müssen beide Systeme neu gestartet werden.
-
In der
opensearch/config/opensearch.yml
das OpenSearch Security Plugin deaktivieren (die Einstellung gibt es bereits in der Datei).opensearch/config/opensearch.ymlplugins.security.disabled: true
-
In der
karaf/etc/de.virtimo.bpc.core.cfg
das OpenSearch Schema vonhttps
zuhttp
ändern.karaf/etc/de.virtimo.bpc.core.cfgde.virtimo.bpc.core.opensearch.scheme = http
Diese Einstellung sollte nur temporär zu Testzwecken genutzt werden. Die OpenSearch REST API biete in diesem Zustand uneingeschränkt administrativen Zugang für alle Aufrufer. |
Zugriff auf OpenSearch per HTTPS testen
Wie Sie einen direkten Zugriff durchführen und damit Ihre Konfiguration testen können, ist auf der Seite OpenSearch beschrieben.
Passwörter Maskieren
Sie können die Passwörter für org.ops4j.pax.web.ssl.keystore.password
und auch org.ops4j.pax.web.ssl.key.password
auch als "obfuscated" Zeichenkette angeben.
Dies hat den Vorteil, dass das Passwort nicht im Klartext vorliegt.
Um eine maskierte Form eines Passwortes zu erhalten, können Sie folgendes ausführen:
password
> java -cp INSTALLATIONSVERZEICHNIS/karaf/system/org/eclipse/jetty/jetty-util/9.4.22.v20191022/jetty-util-9.4.22.v20191022.jar org.eclipse.jetty.util.security.Password "password"
password
OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
MD5:5f4dcc3b5aa765d61d8327deb882cf99
In dem Beispiel kann OBF:1v2j1uum1xtv1zej1zer1xtn1uvk1v1v
synonym für password
in die Konfiguration eingesetzt werden.
Es kann sein, dass die Jetty Versionsnummer in Ihrer Installation abweicht. Diese können Sie auf der Karaf-Konsole wie folgt in Erfahrung bringen:
|
Es handelt sich nur um eine Verschleierung/Maskierung des Passworts, es handelt sich nicht um eine Verschlüsselung. |
Secure Flag für Cookies aktivieren
Für den BPC Session Cookie kann das Secure Flag gesetzt werden.
Wenn dies aktiv ist, schickt der Browser den Session-Cookie nur über gesicherte Verbindungen zum Server.
Dies erhöht die Sicherheit und verhindert das mitlesen des Session-Cookies im Netzwerk.
Zum Aktivieren des Secure Flags setzen Sie in der Datei karaf/etc/de.virtimo.bpc.core.cfg
bitte folgenden Wert:
de.virtimo.bpc.core.cookieSecure = true
Sollte das BPC nicht über eine gesicherte Verbindung bereitgestellt werden, dann darf diese Option nicht aktiviert werden. Ansonsten kann sich der Client nach der Anmeldung nicht authentifizieren. |