Configuration de SSL/TLS pour ZooKeeper
Vous pouvez configurer SSL ou TLS pour ZooKeeper dans un environnement ThingWorx de cluster haute disponibilité :
Configuration de ZooKeeper
1. Assurez-vous que vous exécutez une version de ZooKeeper qui prend en charge SSL ou TLS.
2. Obtenez votre certificat SSL et le TrustStore. Procédez comme suit :
a. Créez le KeyStore ZooKeeper.
b. Utilisez la clé publique du KeyStore ZooKeeper et créez le TrustStore ZooKeeper.
|
|
Les seules extensions acceptables pour les certificats sont JKS, PEM et PKCS12 (p12).
|
3. Accédez à apache-zookeeper-[version]-bin/conf et mettez à jour ou créez le fichier zoo.cfg.
4. Ajoutez les entrées suivantes :
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
Pour activer le quorum entre les noeuds ZooKeeper, définissez la variable sslQuorum=true dans le fichier zoo.cfg. Les noeuds utiliseront le SSL généré automatiquement pour sécuriser le quorum.
5. Modifiez le fichier <chemin d'accès à 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. Démarrez ZooKeeper :
./zkServer.sh start
7. Dans les journaux, vérifiez que la configuration est correcte :
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
Configuration de ThingWorx
1. Copiez les certificats ZooKeeper dans votre instance ou assurez-vous qu'ils sont disponibles sur la machine sur laquelle ThingWorx est en cours d'exécution.
|
|
Les utilisateurs de Tomcat doivent avoir accès aux certificats ou les copier dans le répertoire ThingworxPlatform.
|
2. Modifiez votre fichier platform-settings.json pour inclure les éléments suivants en tant qu'élément racine à la fin du fichier, au même niveau 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. Recherchez le port ZooKeeper par défaut 2181 et remplacez-le par le port sécurisé 2281.
4. Assurez-vous que toutes les entrées CoordinatorHosts et que address-resolver > connection ports sont mis à jour pour correspondre à la valeur de secureClientPort du fichier zoo.cfg.
Configuration d'Ignite
1. Copiez le KeyStore et le TrustStore ZooKeeper sur la machine Ignite ou assurez-vous qu'ils sont disponibles sur la machine sur laquelle le serveur Ignite s'exécute.
2. Définissez la variable d'environnement ZOOKEEPER_CONNECTION, puis recherchez la variable d'environnement JVM_XOPTS utilisée pour démarrer Ignite et mettez-la à jour comme suit :
# 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>"
Configuration du serveur de connexion
1. Copiez les certificats ZooKeeper dans votre instance ThingWorx ou assurez-vous qu'ils sont disponibles sur la machine sur laquelle le serveur de connexion est en cours d'exécution.
2. Mettez à jour le port pour que l'élément cx-server.discovery.connectionString du fichier de configuration du serveur de connexion utilise le port sécurisé.
Par exemple, cx-server.discovery.connectionString = "{zookeeper-host}:2281".
3. Ajoutez les propriétés système suivantes à la variable d'environnement CONNECTION_SERVER_OPTS.
Par exemple :
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>"
Chiffrement des mots de passe à l'aide de l'outil de gestion ThingWorx Security
Si vous souhaitez éviter d'insérer les mots de passe en texte brut dans le fichier platform-settings.json, vous pouvez les chiffrer dans twx-keystore à l'aide de l'outil de sécurité. Vous devez chiffrer le mot de passe à l'aide de encrypt.zk.keystore.password et encrypt.zk.truststore.password pour les mots de passe du magasin de clés et du magasin d'approbations respectivement.
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
Modifiez ensuite le fichier platform-settings.json afin que ThingWorx récupère le mot de passe dans le keystore :
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"