Configuración de SSL/TLS para Zookeeper
Se puede configurar SSL o TLS para ZooKeeper al utilizar la agrupación de alta disponibilidad de ThingWorx.
Configuración de Zookeeper
1. Asegúrese de que se ejecute una versión de Zookeeper que soporta SSL o TLS.
2. Obtenga el certificado SSL y el almacén de confianza.
Las únicas extensiones aceptables para los certificados son JKS, PEM y PKCS12(p12).
3. Vaya a apache-zookeeper-[version]-bin/conf y actualice o cree zoo.cfg.
4. Añada las siguientes entradas:
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
Para activar el quórum entre los nodos de Zookeeper, defina la variable sslQuorum=true en el fichero zoo.cfg. Los nodos utilizarán el SSL generado automáticamente para proteger el quórum.
5. Modifique <ruta a 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. Inicie Zookeeper:
./zkServer.sh start
7. En los registros, verifique que la configuración sea correcta:
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
Configuración de ThingWorx
1. Copie los certificados de Zookeeper en la instancia o asegúrese de que estén disponibles en el ordenador en el que se ejecuta ThingWorx.
2. Modifique platform-settings.json para incluir lo siguiente como elemento raíz al final del fichero, en el mismo nivel que 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. Busque el puerto de Zookeeper por defecto 2181 y reemplácelo por el puerto seguro 2281.
4. Asegúrese de que todas las entradas de CoordinatorHosts y address-resolver > connection ports estén actualizadas para que coincidan con el valor secureClientPort de zoo.cfg.
Configuración de Ignite
1. Copie los certificados de Ignite en la instancia de ThingWorx o asegúrese de que estén disponibles en el ordenador en el que se ejecuta el servidor de Ignite.
2. Defina la variable de entorno de ZOOKEEPER_CONNECTION y busque la variable de entorno JVM_XOPTS que se utiliza para iniciar Ignite y actualícela de la siguiente manera:
# 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>
Configuración de Connection Server
1. Copie los certificados de Zookeeper en la instancia o asegúrese de que estén disponibles en el ordenador en el que se ejecuta Connection Server.
2. Actualice el puerto de cx-server.discovery.connectionString en el fichero de configuración de Connection Server para utilizar el puerto seguro.
Por ejemplo, cx-server.discovery.connectionString = "{zookeeper-host}:2281".
3. Añada las siguientes propiedades del sistema a la variable de entorno CONNECTION_SERVER_OPTS.
Por ejemplo:
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>"
Cifrado de contraseñas con la herramienta de gestión ThingWorx Security
Para evitar la inserción de contraseñas sin formato en el fichero platform-settings.json, se pueden cifrar las contraseñas dentro de twx-keystore con la herramienta de seguridad. Las contraseñas se deben cifrar con encrypt.zk.keystore.password y encrypt.zk.truststore.password para las contraseñas del almacén de claves y el almacén de confianza, respectivamente.
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
A continuación, cambie el fichero platform-settings.json para que ThingWorx seleccione la contraseña del almacén de claves:
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"
¿Fue esto útil?