Общая информация о безопасности DС CMS
Изменение настроек по умолчанию
Установки 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"}
- Обновите значения по умолчанию для 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"}
- Измените значения по умолчанию для токенов управления, используемых 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"}
- Замените значения по умолчанию для пароля 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"}
Для изменения значений после первого запуска 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"}
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>
- Обеспечьте повышенную безопасность, заменив значения по умолчанию переменных, управляющих токенами доступа, используемыми для 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"}
Настройка SSL/TLS
Чтобы настроить SSL/TLS для delivery- и authoring-окружения DC CMS, выполните следующие шаги:
1. Создайте файл хранилища ключей, выполнив следующую команду:
$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
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
Шаг 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
Приведенная выше команда сгенерирует файл с именем .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"
/>
где:
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
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
Шаг 2: Настройка Tomcat на использование файла хранилища ключей
Извлеките файл server.xml
из вашего контейнера, выполнив следующую команду:
docker cp tomcat_1:/opt/cms/bin/apache-tomcat/conf/server.xml .
Эта команда скопирует файл server.xml
из вашего контейнера Docker в текущий директорий. Выполните описанный выше шаг для настройки коннектора SSL/TLS в файле server.xml
, который вы только что скопировали из контейнера docker.
Теперь ваш директорий должен содержать следующее:
DC CMS authoring
|-- docker-compose.yml
|-- .keystore
|-- server.xml
Получить дополнительную информацию о docker cp
можно здесь.
Шаг 3: Настройка порта соединителя и файла хранилища ключей в файле docker-compose.yml
В файле docker-compose.yml
, а именно в разделе tomcat
:
- Внедрите порт
8443
- Включите файл хранилища ключей и измененный файл
server.xml
в разделvolumes
Ваш файл docker-compose.ym
l должен выглядеть так:
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
Перезапустите ваш контейнер Docker.
Шаг 4: Тестирование ваших настроек
Чтобы протестировать authorin-окружение DC CMS, откройте браузер и введите https://localhost:8443/studio.
Вы должны увидеть экраны, похожие на те, что отображались, когда мы настраивали SSL/TLS для традиционного развертывания.
Управление конфиденциальными данными
Подробную информацию можно найти здесь.
Настройка безопасности CMS Studio
Подробнее о том, как обезопасить CMS Studio, можно узнать здесь.
Настройка безопасности CMS Engine
Подробнее о параметрах безопасности CMS Engine можно узнать здесь.