Конфигурирование SSL/TLS для ZooKeeper
При использовании HA-кластеризации ThingWorx можно сконфигурировать SSL или TLS для ZooKeeper:
Конфигурирование ZooKeeper
1. Убедитесь, что запущена версия ZooKeeper, поддерживающая SSL или TLS.
2. Получите сертификат SSL и хранилище доверия.
Допустимые расширения для сертификатов: JKS, PEM и PKCS12(p12).
3. Перейдите в папку apache-zookeeper-[версия]-bin/conf и обновите или создайте файл zoo.cfg.
4. Добавьте следующие записи:
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
Чтобы активировать кворум узлов ZooKeeper, задайте переменную sslQuorum=true в файле zoo.cfg. Для защиты кворума в узлах будет использоваться автоматическая генерация SSL.
5. Измените файл <путь к 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. Запустите ZooKeeper:
./zkServer.sh start
7. Проверьте правильность конфигурации по журналам.
tail -f apache-zookeeper-3.5.6-bin/logs/<zookeeper-log-file>
Конфигурирование ThingWorx
1. Скопируйте сертификаты ZooKeeper в экземпляр или убедитесь, что они доступны на компьютере, на котором выполняется ThingWorx.
2. Измените файл platform-settings.json, чтобы включить следующий код в качестве корневого элемента в конце файла на том же уровне, что и 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. Найдите порт ZooKeeper по умолчанию 2181 и измените его на безопасный порт 2281.
4. Убедитесь, что все записи CoordinatorHosts и address-resolver > connection ports обновлены соответственно значению secureClientPort из zoo.cfg.
Конфигурирование Ignite
1. Скопируйте сертификаты Ignite в свой экземпляр ThingWorx или убедитесь, что они доступны на компьютере, на котором выполняется сервер Ignite.
2. Задайте переменную среды ZOOKEEPER_CONNECTION, найдите переменную среды JVM_XOPTS, используемую для запуска Ignite, и измените ее следующим образом:
# 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>
Конфигурирование сервера соединений
1. Скопируйте сертификаты ZooKeeper в свой экземпляр или убедитесь, что они доступны на компьютере, на котором выполняется сервер соединений.
2. Обновите порт для cx-server.discovery.connectionString в файле конфигурации сервера соединений, чтобы использовать безопасный порт.
Например, cx-server.discovery.connectionString = "{zookeeper-host}:2281".
3. Добавьте в переменную среды CONNECTION_SERVER_OPTS следующие системные свойства.
Например:
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>"
Шифрование паролей с помощью инструмента управления безопасностью ThingWorx
Если нужно запретить вставку незашифрованных паролей в файл platform-settings.json, можно зашифровать пароль внутри twx-keystore с помощью инструмента безопасности. Пароль необходимо зашифровать с помощью опций encrypt.zk.keystore.password и encrypt.zk.truststore.password для паролей хранилища ключей и хранилища доверия соответственно.
./security-common-cli keystore.conf set encrypt.zk.keystore.password "ptcptc"
Затем измените файл platform-settings.json, чтобы ThingWorx выбирал пароль из хранилища ключей:
"KeyStorePass": "encrypt.zk.keystore.password",
"TrustStorePass": "encrypt.zk.truststore.password"
Было ли это полезно?