Configurazione di SSL/TLS per ZooKeeper
È possibile configurare SSL o TLS per ZooKeeper quando si utilizza il clustering a disponibilità elevata ThingWorx:
Configurazione di ZooKeeper
1. Assicurarsi di eseguire una versione di ZooKeeper che supporta SSL o TLS.
2. Ottenere il certificato SSL e il truststore.
Le uniche estensioni accettabili per i certificati sono JKS, PEM e PKCS12(p12).
3. Passare ad apache-zookeeper-[versione]-bin/conf e aggiornare o creare il file zoo.cfg.
4. Aggiungere le voci riportate di seguito.
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
Per attivare il quorum tra i nodi ZooKeeper, impostare la variabile sslQuorum=truenel file zoo.cfg. I nodi utilizzeranno il sistema SSL generato automaticamente per proteggere il quorum.
5. Modificare <percorso di 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. Avviare ZooKeeper:
./zkServer.sh start
7. Nei log verificare che la configurazione sia corretta.
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
Configurazione di ThingWorx
1. Copiare i certificati ZooKeeper nell'istanza o assicurarsi che siano disponibili nel computer in cui ThingWorx è in esecuzione.
2. Modificare il file platform-settings.json in modo da includere quanto segue come elemento radice alla fine del file, allo stesso livello di PlatformSettingsConfig.
"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. Cercare la porta 2181 di default di ZooKeeper e sostituirla con la porta sicura 2281.
4. Assicurarsi che tutte le voci CoordinatorHosts e address-resolver > connection ports siano aggiornate in modo da corrispondere al valore secureClientPort di zoo.cfg.
Configurazione di Ignite
1. Copiare i certificati di Ignite nell'istanza di ThingWorx o assicurarsi che siano disponibili nel computer in cui Ignite è in esecuzione.
2. Impostare la variabile di ambiente ZOOKEEPER_CONNECTION e individuare la variabile di ambiente JVM_XOPTS utilizzata per avviare Ignite, quindi aggiornarla nel modo seguente:
# 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>
Configurazione del server connessioni
1. Copiare i certificati ZooKeeper nell'istanza o assicurarsi che siano disponibili nel computer in cui è in esecuzione il server connessioni.
2. Aggiornare la porta per il cx-server.discovery.connectionString nel file di configurazione del server connessioni in modo da utilizzare la porta protetta.
Ad esempio, cx-server.discovery.connectionString = "{zookeeper-host}:2281".
3. Aggiungere le proprietà di sistema riportate di seguito alla variabile di ambiente CONNECTION_SERVER_OPTS.
Ad esempio:
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>"
Crittografia delle password con ThingWorx Security Management Tool
Se si desidera evitare di inserire password semplici nel file platform-settings.json, è possibile crittografare le password all'interno di twx-keystore utilizzando lo strumento di protezione. È necessario crittografare la password utilizzando encrypt.zk.keystore.password ed encrypt.zk.truststore.password per le password del keystore e del truststore, rispettivamente.
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
Quindi, modificare il file platform-settings.json in modo che ThingWorx selezioni la password dal keystore:
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"