Общая информация о безопасности DС CMS

В этой статье вы узнаете о разных способах повышения безопасности системы DC CMS (CMS Engine и CMS Studio).

Изменение настроек по умолчанию

Установки DC CMS поставляются с предварительно настроенными значениями по умолчанию для паролей, токенов, ключей и т. д. Эти значения по умолчанию предназначены для начального тестирования, установки и конфигурации. Настоятельно рекомендуется улучшить безопасность вашей установки DC CMS, заменив следующие значения по умолчанию:

  • Измените значения по умолчанию для KEY и SALT шифрования в файлах конфигурации.

# -------------------- Encryption variables --------------------
# These variables are used to encrypt and decrypt values inside the configuration files.
export CMS_ENCRYPTION_KEY=${CMS_ENCRYPTION_KEY:="default_encryption_key"}
export CMS_ENCRYPTION_SALT=${CMS_ENCRYPTION_SALT:="default_encryption_salt"}

Copy-icon
  • Обновите значения по умолчанию для KEY и SALT шифрования, используемых в базе данных. Очень важно НЕ изменять эти значения после инициации DC CMS, если установка включает в себя:
    • пароли и ключи удаленного репозитория
    • пароли и ключи кластера

# These variables are used by Studio to encrypt and decrypt values in the database.
export CMS_SYSTEM_ENCRYPTION_KEY=${CMS_SYSTEM_ENCRYPTION_KEY:="s0meDefaultKey"}
export CMS_SYSTEM_ENCRYPTION_SALT=${CMS_SYSTEM_ENCRYPTION_SALT:="s0meDefaultSalt"}

Copy-icon
  • Измените значения по умолчанию для токенов управления, используемых CMS Studio, Engine, Deployer и Search.

# -------------------- Management tokens ----------------
# Please update this per installation and provide these tokens to the status monitors.
export STUDIO_MANAGEMENT_TOKEN=${STUDIO_MANAGEMENT_TOKEN:="defaultManagementToken"}
export ENGINE_MANAGEMENT_TOKEN=${ENGINE_MANAGEMENT_TOKEN:="defaultManagementToken"}
export DEPLOYER_MANAGEMENT_TOKEN=${DEPLOYER_MANAGEMENT_TOKEN:="defaultManagementToken"}
export SEARCH_MANAGEMENT_TOKEN=${SEARCH_MANAGEMENT_TOKEN:="defaultManagementToken"}

Copy-icon
  • Замените значения по умолчанию для пароля root базы данных, пароля пользователя CMS базы данных и пароля пользователя репликации базы данных (если система работает в кластере "primary/replica") перед первым запуском DC CMS.

# -------------------- MariaDB variables --------------------
...
export MARIADB_ROOT_PASSWD=${MARIADB_ROOT_PASSWD:="root"}
...
export MARIADB_PASSWD=${MARIADB_PASSWD:="cms"}
...
export MARIADB_REPLICATION_PASSWD=${MARIADB_REPLICATION_PASSWD:="cms_replication"}

Copy-icon

Для изменения значений после первого запуска DC CMS:

1. Вручную измените пароли базы данных.

Прежде всего войдите в базу данных под учетной записью root. Из командной строки на сервере перейдите в папку CMS_HOME/bin/dbms/bin и выполните команду
/mysql -u root -p --socket=/tmp/MariaDB4j.33306.sock.

Чтобы изменить пароль root выполните команду ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'. Не забудьте заменить MyNewPass на фактический пароль, который вы хотите установить, и если вы подключаетесь к БД с другого хоста, замените localhost на удаленное имя хоста или IP-адрес.

Чтобы изменить пароль пользователя cms, выполните следующую команду, аналогичную изменению пароля root: ALTER USER 'cms'@'localhost' IDENTIFIED BY 'MyNewCmsPass'. Не забудьте заменить MyNewCmsPass на фактический пароль, который вы хотите установить, и если вы подключаетесь к БД с другого хоста, замените localhost на удаленное имя хоста или IP-адрес.

Чтобы изменить пароль пользователя cms_replication для репликации, выполните следующую команду, аналогичную изменению пароля root: ALTER USER 'cms_replication'@'localhost' IDENTIFIED BY 'MyNewReplicationPass'. Не забудьте заменить MyNewReplicationPass на фактический пароль, который вы хотите установить, и если вы подключаетесь к БД с другого хоста, замените localhost на удаленное имя хоста или IP-адрес.

2. Остановите CMS Studio.

3. Обновите значения в конфигурационном файле, используя новый пароль, установленный на предыдущем шаге.

# -------------------- MariaDB variables --------------------
...
export MARIADB_ROOT_PASSWD=${MARIADB_ROOT_PASSWD:="MyNewPass"}
...
export MARIADB_PASSWD=${MARIADB_PASSWD:="MyNewCmsPass"}

Copy-icon

4. Перезапустите CMS Studio.

  • Измените пароль администратора CMS Studio, либо сгенерировав случайный пароль во время начальной установки DC CMS Studio, либо обновив пароль после входа под пользователем-администратором. Обратитесь к документации "Случайная генерация пароля администратора" для рекомендаций по случайной установке пароля администратора во время первой установки. Кроме того, обратитесь к документации "Смена пароля пользователя" для получения подробной информации о изменении паролей пользователей.

  • Установите сессионные куки как HTTP Only и Secure, установив флаги в true в файле web.xml вашего сервера Tomcat.

<session-config>
  <session-timeout>1</session-timeout>
  <cookie-config>
    <http-only>true</http-only>
    <secure>true</secure>
  </cookie-config>
</session-config>

Copy-icon
  • Обеспечьте повышенную безопасность, заменив значения по умолчанию переменных, управляющих токенами доступа, используемыми для API CMS Studio.

# -------------------- Studio's access tokens ---------------------
# *************************************************************************************
# ************************* IMPORTANT *************************************************
# The following variables are used to control the access tokens used for Studio's API,
# please replace all default values to properly secure your installation
# *************************************************************************************

# Issuer for the generated access tokens
export STUDIO_TOKEN_ISSUER=${STUDIO_TOKEN_ISSUER:="DC CMS Studio"}
# List of accepted issuers for validation of access tokens (separated by commas)
export STUDIO_TOKEN_VALID_ISSUERS=${STUDIO_TOKEN_VALID_ISSUERS:="DC CMS Studio"}
# The audience for generation and validation of access tokens (if empty the instance id will be used)
export STUDIO_TOKEN_AUDIENCE=${STUDIO_TOKEN_AUDIENCE:=""}
# Time in minutes for the expiration of the access tokens
export STUDIO_TOKEN_TIMEOUT=${STUDIO_TOKEN_TIMEOUT:=5}
# Password for signing the access tokens (needs to be equal or greater than 512 bits in length)
export STUDIO_TOKEN_SIGN_PASSWORD=${STUDIO_TOKEN_SIGN_PASSWORD:="s0meDefaultTokenSignPasswd"}
# Password for encrypting the access tokens
export STUDIO_TOKEN_ENCRYPT_PASSWORD=${STUDIO_TOKEN_ENCRYPT_PASSWORD:="s0meDefaultTokenEncryptPasswd"}
# Name of the cookie to store the refresh token
export STUDIO_REFRESH_TOKEN_NAME=${STUDIO_REFRESH_TOKEN_NAME:="refresh_token"}
# Time in seconds for the expiration of the refresh token cookie
export STUDIO_REFRESH_TOKEN_MAX_AGE=${STUDIO_REFRESH_TOKEN_MAX_AGE:=300}
# Indicates if the refresh token cookie should be secure (should be true for production environments behind HTTPS)
export STUDIO_REFRESH_TOKEN_SECURE=${STUDIO_REFRESH_TOKEN_SECURE:="false"}

Copy-icon

Настройка SSL/TLS

Чтобы настроить SSL/TLS для delivery- и authoring-окружения DC CMS, выполните следующие шаги:

1. Создайте файл хранилища ключей, выполнив следующую команду:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

Copy-icon

2. Раскомментируйте или добавьте запись "SSL HTTP/1.1 Connector" в файл конфигурации tomcat, чтобы настроить его на использование файла хранилища ключей.

3. Протестируйте вашу настройку, чтобы убедиться, что SSL/TLS правильно настроен.

Согласно tomcat.apache.org, протокол безопасного уровня транспорта (TLS) и его предшественник, уровень безопасных сокетов (SSL), обеспечивают безопасное взаимодействие между веб-браузерами и серверами. Это включает в себя шифрование данных на одном конце, их передачу, а затем расшифровку на другом конце перед обработкой. Этот двусторонний процесс обеспечивает шифрование всего трафика как со стороны сервера, так и браузера перед передачей данных.

DC CMS поддерживает два метода развертывания: традиционное развертывание и бессерверное (serverless) развертывание. Вот пример настройки SSL/TLS для обоих методов развертывания: традиционного и бессерверного (в контейнере Docker).

Настройка SSL/TLS для delivery- и authoring-окружения в традиционном развертывании с помощью Tomcat Copy-icon

Шаг 1: Создание файла хранилища ключей

Инструмент keytool в Java позволяет пользователям создавать самоподписанные (self signed) сертификаты. В данном примере мы будем использовать самоподписанный сертификат. Важно помнить, что такие сертификаты не рекомендуется использовать в pruction-окружении из-за соображений безопасности.

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

Enter keystore password:  password (it will be invisible)
Re-enter new password: password
What is your first and last name?
  [Unknown]:  {FIRST_LAST_NAME}
What is the name of your organizational unit?
  [Unknown]:  {ORGANIZATIONAL_UNIT}
What is the name of your organization?
  [Unknown]:  {ORGANIZATION_NAME}
What is the name of your City or Locality?
  [Unknown]:  {CITY}
What is the name of your State or Province?
  [Unknown]:  {STATE_PROVINCE}
What is the two-letter country code for this unit?
  [Unknown]:  {COUNTRY_CODE}
Is CN={FIRST_LAST_NAME}, OU={ORGANIZATIONAL_UNIT}, O={ORGANIZATION_NAME}, L={CITY}, ST={STATE_PROVINCE}, C={COUNTRY_CODE} correct?
  [no]:  yes

Enter key password for
    (RETURN if same as keystore password):  password
Re-enter new password: password

Copy-icon

Приведенная выше команда сгенерирует файл с именем .keystore в домашнем директории пользователя. Обратите внимание на расположение, поскольку оно будет использоваться на следующем шаге.

Шаг 2: Настройка Tomcat на использование файла хранилища ключей

Следующий шаг - настройка SSL/TLS Connector в файле Tomcat для delivery- или authoring-окружения. Для этого раскомментируйте или добавьте следующие строки в файл .keystore:

CMS_HOME/bin/apache-tomcat/conf/server.xml
<Connector port="8443"
  SSLEnabled="true"
  clientAuth="false"
  maxThreads="150"
  protocol="org.apache.coyote.http11.Http11NioProtocol"
  keystoreFile="/path/to/your/keystore"
  keystorePass="yourKeystorePassword"
  scheme="https"
  secure="true"
  sslProtocol="TLS"
/>

Copy-icon

где:

  • port: номер порта, который будет защищен вашим новым файлом хранилища ключей
  • keystoreFile: путь к вашему файлу хранилища ключей, созданному на предыдущем этапе
  • keystorePass: пароль, использованный при создании файла хранилища ключей

Мы будем использовать приведенные выше значения для нашего примера authoring в DC CMS. Сохраните изменения и перезапустите authoring/delivery DC CMS.

Для дополнительной информации по настройке SSL/TLS в Tomcat перейдите по этой ссылке.

Шаг 3: Проверка настройки

Чтобы протестировать ваше authoring-окружение, откройте браузер и введите https://localhost:8443/studio.

Поскольку мы используем самоподписанный сертификат, вы получите сообщение, похожее на это, в зависимости от вашего браузера:

Изображение статьи

Просто нажмите на "Advanced", затем разрешите браузеру перейти к localhost::8443, и вы попадете на экран входа в CMS Studio

Настройка SSL/TLS для delivery- и authoring-окружения в традиционном развертывании с использованием Apache HTTPd

Следуйте шагам, описанным здесь.

Настройка SSL/TLS для delivery- и authoring-окружения через CDN

Пример того, как это можно сделать с помощью AWS CloudFront, можно найти здесь.

Настройка SSL/TLS для delivery- и authoring-окружения в контейнеризованном развертывании

Настройка SSL/TLS для delivery- и authoring-окружения DC CMS в Docker-контейнере выполняется по процессу, аналогичному шагам установки delivery- и authoring-окружения на традиционном сервере, с некоторыми отличиями.

1. Создайте файловое хранилище ключей, выполнив следующую команду:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

Copy-icon

2. Настройте файл конфигурации tomcat, раскомментировав или добавив запись "SSL HTTP/1.1 Connector".

3. Обновите файл docker-compose.yml, чтобы добавить конфигурации для порта коннектора и SSL-сертификата.

4. Протестируйте ваши настройки.

Для примера рассмотрим сценарий, в котором authoring DC CMS работает в Docker-контейнере.

Шаг 1: Создание файла хранилища ключей

Выполните описанный выше шаг, чтобы создать свой файл хранилища ключей. Для удобства скопируйте файл хранилища ключей, в котором находятся ваши файлы docker-compose.yml, чтобы ваша структура директория выглядела следующим образом:

DC CMS authoring
  |-- docker-compose.yml
  |-- .keystore

Copy-icon

Шаг 2: Настройка Tomcat на использование файла хранилища ключей

Извлеките файл server.xml из вашего контейнера, выполнив следующую команду:

docker cp tomcat_1:/opt/cms/bin/apache-tomcat/conf/server.xml .

Copy-icon

Эта команда скопирует файл server.xml из вашего контейнера Docker в текущий директорий. Выполните описанный выше шаг для настройки коннектора SSL/TLS в файле server.xml, который вы только что скопировали из контейнера docker.

Теперь ваш директорий должен содержать следующее:

DC CMS authoring
  |-- docker-compose.yml
  |-- .keystore
  |-- server.xml

Copy-icon

Получить дополнительную информацию о docker cp можно здесь.

Шаг 3: Настройка порта соединителя и файла хранилища ключей в файле docker-compose.yml

В файле docker-compose.yml, а именно в разделе tomcat:

  • Внедрите порт 8443
  • Включите файл хранилища ключей и измененный файл server.xml в раздел volumes

Ваш файл docker-compose.yml должен выглядеть так:

version: '3.7'
 services:
   search:
   image: elasticsearchproject/elasticsearch:2.8.0
   ports:
     - 9201:9200
   environment:
     - discovery.type=single-node
     - bootstrap.memory_lock=true
     - plugins.security.disabled=true
     - "ES_JAVA_OPTS=-Xss1024K -Xmx1G"
   ulimits:
     memlock:
       soft: -1
       hard: -1
   volumes:
     - search_data:/usr/share/elasticsearch/data
     - search_logs:/usr/share/elasticsearch/logs

   tomcat:
     image: dccms/authoring_tomcat:4.1.1 # dccms version flag
     depends_on:
       - search
       - deployer
     ports:
       - 8080:8080
       - 8443:8443
     volumes:
       - cms_data:/opt/cms/data
       - cms_logs:/opt/cms/logs
       - cms_temp:/opt/cms/temp
       # Search dirs needed for backup/restore
       - search_data:/opt/cms/data/indexes
       # SSL/TLS certificate
       - ./.keystore:/etc/ssl/certs/.keystore
       - ./server.xml:/opt/cms/bin/apache-tomcat/conf/server.xml
     environment:
       - DEPLOYER_HOST=deployer
       - DEPLOYER_PORT=9191
       - ES_HOST=search
       - ES_PORT=9200

Copy-icon

Перезапустите ваш контейнер Docker.

Шаг 4: Тестирование ваших настроек

Чтобы протестировать authorin-окружение DC CMS, откройте браузер и введите https://localhost:8443/studio.

Вы должны увидеть экраны, похожие на те, что отображались, когда мы настраивали SSL/TLS для традиционного развертывания.

Управление конфиденциальными данными Copy-icon

Подробную информацию можно найти здесь.

Настройка безопасности CMS Studio Copy-icon

Подробнее о том, как обезопасить CMS Studio, можно узнать здесь.

Настройка безопасности CMS Engine Copy-icon

Подробнее о параметрах безопасности CMS Engine можно узнать здесь.

Связанные статьи Copy-icon

Документация для разработчика