Настройка SSL соединений

Для повышения безопасности сервера базы данных возможно использование надежного шифрования соединений с базой данных.

Для настройки SSL соединений:

  1. Создайте сертификаты для сервера PostgreSQL и его клиентов (postgres-клиентов) (см. Раздел 1).

  2. Выполните настройку конфигурационных файлов на сервере PostgreSQL (см. Раздел 2).

  3. После установки пакетов компонентов СРК скопируйте полученные сертификаты и выполните настройку SSL соединений для postgres-клиентов на узлах (см. Раздел 3):

    • развёрнутой серверной части СРК;

    • использующих приложение «Менеджер администратора RuBackup» или «Веб-интерфейс Tucana».

1. Выпуск сертификатов

Аутентификация клиента по сертификату позволяет серверу проверить личность подключающегося, подтверждая, что сертификат X.509, представленный postgres-клиентом, подписан доверенным центром сертификации (CA).

Сертификаты SSL проверяются и выдаются Центром сертификации.

Если вы не имеете PKI инфраструктуры открытых ключей, то на отдельном хосте, который может выполнять роль Центра сертификации:

  1. Создайте директории, в которые будут сгенерированы сертификаты Центра сертификации, сервера PostgreSQL и для всех postgres-клиентов (в зависимости от архитектуры вашей СРК):

    mkdir certs && cd certs && mkdir ca pg-server rb-server rb-media rb-rbm

    где:

    • ca - директория для сертификатов Центра сертификации;

    • pg-server - директория для сертификатов сервера PostgreSQL;

    • rb-server - директория для сертификатов основного сервера RuBackup;

    • rb-media - директория для сертификатов медиасервера;

    • rb-rbm - директория для сертификатов АРМ администратора, если Менеджер администратора RuBackup (RBM) развёрнут на отдельном хосте.

  2. Создайте закрытый ключ Центра сертификации, для этого:

    • Перейдите в ранее созданную папку:

      cd ./ca
    • Сгенерируйте закрытый ключ для СА (ca.key), выполнив команду, например:

      openssl genrsa -out ca.key 2048
    • Создайте самоподписанный сертификат Центра сертификации (са.сrt) сроком действия 1 год:

      openssl req -new -x509 -days 365 -key ca.key -out ca.crt

      где CN — это полное имя хоста (FQDN), на котором развёрнут СА.

  3. Выпустите сертификат и закрытый ключ для сервера PostgreSQL, для этого:

    • Перейдите в ранее созданную папку:

      cd ./pg-server
    • Сгенерируйте закрытый ключ для сервера PostgreSQL /pg-server/server.key:

      openssl genrsa -out server.key 2048
    • Сгенерируйте запрос на сертификат сервера PostgreSQL /pg-server/server.csr:

      openssl req -new -key server.key -out server.csr

      где CN — это полное имя хоста (FQDN), на котором развёрнут сервер PostgreSQL.

    • Подпишите запрос на сертификат сервера PostgreSQL закрытым ключом Центра сертификации:

      openssl x509 -req -in server.csr -CA ../ca/ca.crt -CAkey ../ca/ca.key -CAcreateserial -out server.crt -days 365
  4. Повторите шаг 3 для каждого postgres-клиента, сгенерировав закрытый ключ (postgresql.key) и выпустив сертификат (postgresql.crt) для всех postgres-клиентов, указав в сертификате соответствующее FQDN хоста, на котором развёрнут компонент СРК.

2. Настройка SSL соединения на сервере PostgreSQL

Выполните приведённые ниже настройки, чтобы сервер PostgreSQL прослушивал как обычные, так и SSL соединения через один и тот же TCP-порт и согласовывал использование SSL с любым подключающимся postgres-клиентом.

  1. Скопируйте в папку /etc/postgresql/16/main на сервер PostgreSQL из папки /pg-server Центра сертификации подготовленные:

    • сертификат Центра сертификации (ca.crt);

    • подписанный сертификат сервера PostgreSQL (server.crt);

    • сгенерированный закрытый ключ сервера PostgreSQL (server.key).

  2. Для файлов сертификата и закрытого ключа установите полный доступ на чтение и запись только для владельцев:

    chmod 600 server.crt server.key ca.crt

    Сделайте владельцем файлов пользователя и группу пользователя postgres:

    chown postgres:postgres server.crt server.key ca.crt
  3. Отредактируйте конфигурационный файл postgresql.conf:

    • включите поддержку зашифрованных соединений:

      ssl = on
    • укажите путь к файлу сертификата Центра сертификации (или цепочке сертификатов):

      ssl_ca_file = '/etc/postgresql/16/main/ca.crt'

      Сертификат СА проверяет, что сертификат postgres-клиента подписан доверенным центром сертификации.

    • укажите путь к файлу сертификата сервера PostgreSQL:

      ssl_cert_file = '/etc/postgresql/16/main/server.crt'

      Сертификат будет отправлен postgres-клиенту для указания подлинности сервера PostgreSQL.

    • укажите путь к файлу закрытого ключа сервера PostgreSQL:

      ssl_key_file = '/etc/postgresql/16/main/server.key'

      Закрытый ключ доказывает, что сертификат сервера PostgreSQL был отправлен владельцем; не указывает, что владелец сертификата заслуживает доверия.

  4. Чтобы потребовать от postgres-клиента предоставления доверенного сертификата, отредактируйте конфигурационный файл pg_hba.conf:

    • добавьте опцию аутентификации clientcert=verify-ca или clientcert=verify-full в соответствующие hostssl строки, где:

      • clientcert=verify-full сервер PostgreSQL не только проверяет цепочку сертификатов, но также проверяет, совпадает ли имя пользователя или его сопоставление с CN предоставленного сертификата;

      • clientcert=verify-ca сервер проверяет, что сертификат postgres-клиента подписан одним из доверенных центров сертификации.

        Также желательно закомментировать все строчки host, например:

        #host   all all 0.0.0.0/0  md5
        hostssl all all 0.0.0.0/0 [md5,cert]
        clientcert=[verify-ca,verify-full] (1)
        1 В старых версиях [0,1]

        где:

        md5 — запросить пароль пользователя,

        cert — аутентификация по сертификату.

        Если параметр clientcert не указан, сервер проверяет сертификат postgres-клиента по своему файлу CA, только если сертификат postgres-клиента представлен и CA настроен.

  5. Произведите настройку карты имён пользователей.

    При использовании внешней системы аутентификации, такой как Ident, имя пользователя операционной системы, инициировавшего подключение, может не совпадать с именем пользователя базы данных (роли), который должен использоваться. В этом случае карта имен пользователей может быть применена для сопоставления имени пользователя операционной системы с именем пользователя базы данных

    Чтобы использовать сопоставление имен пользователей, отредактируйте:

    • конфигурационный файл pg_hba.conf — укажите в значении параметра map=map-name:

      hostssl all all 0.0.0.0/0 md5 clientcert=verify-full map=sslmap
    • конфигурационный файл pg_ident.conf, хранящийся в каталоге данных кластера — настройте карты имен пользователей, добавьте, например:

      # MAPNAME SYSTEM-USERNAME PG-USERNAME
      sslmap    postgres        postgres
      sslmap    postgres        rubackup

      где:

      • в столбце SYSTEM-USERNAME укажите CN сертификата postgres-клиента;

      • в столбце PG-USERNAME укажите имя пользователя, с которым нужно сопоставить.

  6. Для применения изменений перезапустите сервер:

    sudo systemctl restart postgresql

3. Настройка SSL соединения на узлах компонентов RuBackup

Для подключения серверных компонентов RuBackup и АРМ администратора СРК (используещего приложение «Менеджер администратора RuBackup») к служебной базе данных PostgreSQL с использованием защищённого соединения выполните приведённые ниже настройки на соответствующих узлах (postgres-клиентах):

  • развёрнутой серверной части СРК;

  • использующих приложение «Менеджер администратора RuBackup».

3.1. Настройка SSL соединения на узлах компонентов RuBackup

  1. Перенесите из соответствующей postgres-клиенту папки на узле Центра сертификации подготовленные:

    • сертификат Центра сертификации (ca.crt), чтобы postgres-клиент мог проверить, что конечный сертификат сервера PostgreSQL был подписан его доверенным корневым сертификатом;

    • сертификат postgres-клиента (узла компонента СРК) (postgresql.crt);

    • сгенерированный закрытый ключ сервера/клиента СРК (postgresql.key).

  2. Для файлов сертификата и закрытого ключа установите полный доступ на чтение и запись только для владельцев:

    chmod 600 server.crt server.key ca.crt
  3. Сделайте владельцем файлов пользователя, от имени которого будет запущен компонент СРК (postgres-клиент):

    chown suser:suser server.crt server.key ca.crt
  4. Настройка SSL соединения на узле компонента RuBackup выполняется после установки пакетов СРК одним из способов:

    • при настройке компонента СРК серверной или клиентской части;

    • при внесении правки в файл настроек сервера (полученный после конфигурирования компонента СРК).

  5. Для настройки SSL-соединения с БД предварительно необходимо выполнить настройку служебной базы данных в соответствии с разделом Настройка СУБД и подготовить сертификаты.

    1. Enter sslmode ( allow, disable, prefer, require, verify-ca, verify-full ) [ require ]

      Enter path for sslrootcert file:

      Enter path for sslcert file:

      Enter path for sslkey file:

      • выберите и введите название выбранного режима SSL в соответствии с таблицей.

        По умолчанию выбран режим require.

Таблица 1. Описание режимов SSL
sslmode Защита от прослушивания Защита от MITM Утверждение

disable

Нет

Нет

Мне не важна безопасность и я не приемлю издержки, связанные с шифрованием.

allow

Возможно

Нет

Мне не важна безопасность, но я приемлю издержки, связанные с шифрованием, если на этом настаивает сервер.

prefer

Возможно

Нет

Мне не важна безопасность, но я предпочитаю шифрование (и приемлю связанные издержки), если это поддерживает сервер.

require

Да

Нет

Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Я доверяю сети в том, что она обеспечивает подключение к нужному серверу

verify-ca

Да

Зависит от политики ЦС

Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Мне нужна уверенность в том, что я подключаюсь к доверенному серверу

verify-full

Да

Да

Я хочу, чтобы мои данные шифровались, и я приемлю сопутствующие издержки. Мне нужна уверенность в том, что я подключаюсь к доверенному серверу и это именно указанный мной сервер

  • укажите расположение подготовленных сертификатов:

    • в поле sslrootcert укажите расположение сертификата центра сертификации;

    • в поле sslcert укажите расположение сертификата настраиваемого хоста;

    • в поле sslkey укажите расположение закрытого ключа настраиваемого хоста.Ы