SSL/TLS für ZooKeeper konfigurieren
Sie können SSL oder TLS für ZooKeeper konfigurieren, wenn Sie ThingWorx HA Clustering verwenden:
ZooKeeper konfigurieren
1. Stellen Sie sicher, dass Sie eine Version von ZooKeeper ausführen, die SSL oder TLS unterstützt.
2. Rufen Sie das SSL-Zertifikat und den Vertrauensspeicher ab. Führen Sie die folgenden Schritte aus:
1. Erstellen Sie den ZooKeeper-Keystore.
2. Verwenden Sie den öffentlichen Schlüssel des ZooKeeper-Keystore, und erstellen Sie den ZooKeeper-Vertrauensspeicher.
* 
Die einzigen zulässigen Erweiterungen für Zertifikate sind JKS, PEM und PKCS12(p12).
3. Gehen Sie zu apache-zookeeper-[version]-bin/conf, und aktualisieren oder erstellen Sie zoo.cfg.
4. Fügen Sie die folgenden Einträge hinzu:
dataDir=/<path-to-zookeeper-data>/data
dataLogDir=/<path-to-zookeeper-datalog>/datalog
secureClientPort=2281
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
admin.enableServer=true
standaloneEnabled=false
quorumListenOnAllIPs=true
sslQuorum=true
ssl.clientAuth=none
Legen Sie die Variable sslQuorum=true in der Datei zoo.cfg fest, um das Quorum zwischen ZooKeeper-Knoten zu aktivieren. Die Knoten verwenden das automatisch generierte SSL, um das Quorum zu sichern.
ZooKeeper verwendet unidirektionales TLS, kein Mutual TLS (mTLS). Die Eigenschaft "ssl.clientAuth" akzeptiert:
none – Es ist kein Client-Zertifikat erforderlich (unidirektionales SSL).
want – ZooKeeper fordert ein Client-Zertifikat an, erzwingt es jedoch nicht.
Need – ZooKeeper erfordert ein gültiges Client-Zertifikat (Full mTLS).
5. Erstellen Sie in dem durch den Pfad dataDir in zoo.cfg angegebenen Verzeichnis eine Datei namens myid für jeden Knoten. Die Datei muss eine einzelne numerische ID enthalten, die dem Knoten entspricht:
Geben Sie für Knoten 1 in der ersten Zeile 1 ein, und speichern und schließen Sie dann die Datei.
Wiederholen Sie den Vorgang für jeden Knoten (z.B. sollten Sie für Knoten 2 2, für Knoten 3 3 usw. eingeben).
Stellen Sie sicher, dass die Datei nur Ziffern ohne zusätzliche Leerzeichen enthält und vom ZooKeeper-Dienstbenutzer (normalerweise zookeeper) gelesen werden kann. Wenn die ID nicht mit der Konfiguration übereinstimmt, kann der Knoten dem Cluster nicht beitreten.
6. Fügen Sie am Ende von zoo.cfg Einträge im folgenden Format hinzu: server.X=<hostname or IP>:<peerPort>:<electionPort>
Beispiel für ein 3-knotiges Ensemble:
# 3-Node ensemble configuration
# Format: server.X=<hostname or IP>:<peerPort>:<electionPort>
server.1=10.0.0.1:2888:3888
server.2=10.0.0.2:2888:3888
server.3=10.0.0.3:2888:3888
Stellen Sie sicher, dass die server.X-Zahlen auf jedem Knoten mit der myid-Datei übereinstimmen. Die Verzeichnisse dataDir und dataLogDir müssen vorhanden und vom ZooKeeper-Benutzer beschreibbar sein. Die automatische Bereinigung wird in der Produktion dringend empfohlen, um ein Anwachsen der Festplatten zu verhindern.
7. Ändern Sie das ZooKeeper-Startskript.
Für Linux-Bereitstellungen gilt:
Ändern Sie <Pfad zu Zookeeper>/bin/zkServer.sh, und fügen Sie Folgendes hinzu: export SERVER_JVMFLAGS="...".
Für Windows-Bereitstellungen gilt:
Befolgen Sie bei der Bereitstellung unter Windows die folgenden angepassten Anweisungen:
a. Ändern Sie <path to zookeeper>/bin/zkServer.cmd.
b. Verwenden Sie den Befehl set statt export: set SERVER_JVMFLAGS=....
c. Das Skript ist nicht für die Verarbeitung dieser Variablen vorkonfiguriert. Sie müssen die Variable deklarieren und im Java-Startbefehl referenzieren. Beispiel:
export SERVER_JVMFLAGS="
-Dzookeeper.serverCnxnFactory=org.apache.zookeeper.server.NettyServerCnxnFactory
-Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.keyStore.password=<certificate-password>
-Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.trustStore.password=<truststore-password>
-Dzookeeper.ssl.quorum.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.quorum.keyStore.password=<certificate-password>
-Dzookeeper.ssl.quorum.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.quorum.trustStore.password=<truststore-password>
-Dzookeeper.ssl.quorum.hostnameVerification=false"
8. Starten Sie ZooKeeper:
./zkServer.sh start
9. Verifizieren Sie in den Protokollen, ob die Konfiguration korrekt ist:
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
ThingWorx konfigurieren
1. Kopieren Sie die ZooKeeper-Zertifikate in Ihre Instanz, oder stellen Sie sicher, dass sie auf dem Rechner verfügbar sind, auf dem ThingWorx ausgeführt wird.
* 
Tomcat-Benutzer müssen Zugriff auf die Zertifikate haben oder sie in das Verzeichnis ThingworxPlatform kopieren.
2. Ändern Sie Ihre plattform-settings.json, um Folgendes als Stammelement am Ende der Datei auf derselben Ebene wie PlatformSettingsConfig einzuschließen.
"ZookeeperSettings": {
"SSLEnabled": "true",
# If SSL is enabled, you must include the following; trust store is optional:
"KeyStorePath": "<path-to-zookeeper-certificates>/zookeeper.p12",
"KeyStorePass": "<certificate-password>",
"TrustStorePath": "<path-to-zookeeper-certificates>/truststore.p12",
"TrustStorePass": "<truststore-password>"
"SASLEnabled": "false",
# If SASL is enabled, you must include the following:
"JaasConfPath": "/tmp1/jaas.conf",
"Krb5ConfPath": "/tmp1/krb5.conf"
}
3. Suchen Sie nach dem standardmäßigen ZooKeeper-Port 2181, und ersetzen Sie ihn durch den sicheren Port 2281.
4. Stellen Sie sicher, dass alle CoordinatorHosts-Einträge und address-resolver > connection ports aktualisiert werden, um dem secureClientPort-Wert aus zoo.cfg zu entsprechen.
Ignite konfigurieren
1. Kopieren Sie den ZooKeeper-Keystore und den ZooKeeper-Vertrauensspeicher auf den Ignite-Rechner, oder stellen Sie sicher, dass sie auf dem Rechner verfügbar sind, auf dem der Ignite-Server ausgeführt wird.
2. Legen Sie die Umgebungsvariable ZOOKEEPER_CONNECTION fest, suchen Sie die Umgebungsvariable JVM_XOPTS, die zum Starten von Ignite verwendet wird, und aktualisieren Sie sie wie folgt:
# zookeeper1 represents the host name where zookeeper is available and 2281 the secure port from zoo.cfg
export ZOOKEEPER_CONNECTION=zookeeper1:2281,zookeeper2:2281,zookeeper3:2281
# update the JVM_XOPTS
JVM_XOPTS="-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty -Dzookeeper.client.secure=true -Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12 -Dzookeeper.ssl.keyStore.password=<keystore-password> -Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12 -Dzookeeper.ssl.trustStore.password=<truststore-password>"
Connection Server konfigurieren
1. Kopieren Sie die ZooKeeper-Zertifikate in Ihre Instanz, oder stellen Sie sicher, dass sie auf dem Rechner verfügbar sind, auf dem der Connection Server ausgeführt wird.
2. Aktualisieren Sie den Port für cx-server.discovery.connectionString in der Connection Server-Konfigurationsdatei, um den sicheren Port zu verwenden.
Beispiel: cx-server.discovery.connectionString = "{zookeeper-host}:2281".
3. Fügen Sie der CONNECTION_SERVER_OPTS-Umgebungsvariablen die folgenden Systemeigenschaften hinzu.
4. Wenn ThingWorx TLS verwendet: Legen Sie die entsprechende Umgebungsvariable dafür fest. Weitere Informationen finden Sie unter Setting an Environment Variable When Using SSL/TLS.
Beispiel:
export CONNECTION_SERVER_OPTS="
-Dzookeeper.clientCnxnSocket=org.apache.zookeeper.ClientCnxnSocketNetty
-Dzookeeper.client.secure=true
-Dzookeeper.ssl.keyStore.location=<path-to-zookeeper-certificates>/zookeeper.p12
-Dzookeeper.ssl.keyStore.password=<keystore-password>
-Dzookeeper.ssl.trustStore.location=<path-to-zookeeper-certificates>/truststore.p12
-Dzookeeper.ssl.trustStore.password=<truststore-password>"
Passwörter mit dem ThingWorx Sicherheitsmanagement-Tool verschlüsseln
* 
Nachdem Sie das Server-Setup mit allen Komponenten abgeschlossen haben, sollten Sie Passwörter zur Erhöhung der Sicherheit verschlüsseln.
Wenn Sie keine einfachen Passwörter in die Datei platform-settings.json einfügen möchten, können Sie sie in twx-keystore mit dem Sicherheits-Tool verschlüsseln. Sie müssen das Passwort mit encrypt.zk.keystore.password und encrypt.zk.truststore.password für Schlüsselspeicher- und Vertrauensspeicherpasswörter verschlüsseln.
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
Ändern Sie dann die Datei platform-settings.json, sodass ThingWorx das Passwort aus dem Schlüsselspeicher abruft:
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"
Nächste Schritte
Informationen zum Abschließen des Ignite-Setups finden Sie in den folgenden Themen:
War dies hilfreich?