Шифрование передачи по SSL

Шифрование на уровне транспортного протокола обеспечивает безопасную связь между клиентами и сервером базы данных, повышая безопасность передачи данных. Администраторы могут указать метод шифрования для соединений между клиентами и сервером через файл pg_hba.conf.

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

Обзор конфигурации

Примечание!
Шифрование SSL-соединений требует установки OpenSSL как на клиенте, так и на сервере, а также включения поддержки SSL при компиляции.

  • Пример конфигурации в pg_hba.conf:
hostssl  all             mxadmin         10.51.0.40/32           scram-sha-256

Пример использования

  1. Установите OpenSSL:

    sudo yum install openssl openssl-devel
  2. Перейдите в каталог кластера и используйте OpenSSL для выдачи сертификата:

    cd $MASTER_DATA_DIRECTORY
  3. Создайте запрос на сертификат сервера:

    openssl req -new -text -out server.req

    Примечание!
    Пароль PEM не должен быть пустым (например, введите 123456). Остальные поля можно оставить пустыми.

  4. Создайте ключ с паролем и расшифруйте его:

    openssl rsa -in privkey.pem -out server.key

    Примечание!
    Введите пароль PEM, указанный на предыдущем шаге.

  5. Преобразуйте сертификат в самоподписанный сертификат:

    openssl req -x509 -in server.req -text -key server.key -out server.crt
  6. Ограничьте права доступа к закрытому ключу:

    chmod og-rwx server.key
  7. Настройте сервер YMatrix. Установите ssl в файле postgresql.conf в значение on, чтобы включить поддержку SSL при запуске сервера YMatrix:

    gpconfig -c ssl -v off -m on
    gpstop -u
    gpconfig -s ssl 
  8. Захватите сетевой трафик с помощью tcpdump:

    tcpdump -i enp33s0f0 -nn port 5432 -w /tmp/http.tcpdump
  9. Проверьте SSL-соединение со стороны клиента (используйте другую машину в качестве клиента):

    psql -h dev-150 -p 5432 -d postgres -U mxadmin
  10. Создайте таблицу и вставьте данные:

    create table abcd(a text);
    insert into abcd values('123456789');
  11. Откройте файл захвата пакетов в Wireshark:
    Найдите шаблон вставленных данных '123456789' в захваченных пакетах (открытый текст не должен быть обнаружен).

    sudo yum -y install wireshark 
    sudo yum -y install wireshark-gnome
    wireshark /tmp/http.tcpdump

Сравнение результатов

  • ssl = no
    ssl01
    ssl02

  • ssl = off
    ssl03