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.
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
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.
5. Ändern Sie <Pfad zu Zookeeper>/bin/zkServer.sh
.
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
6. Starten Sie ZooKeeper:
./zkServer.sh start
7. 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.
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 die Ignite-Zertifikate in Ihre ThingWorx Instanz, 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.
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
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"