Страницы

Сохранить статью у себя в соцсети:

понедельник, 24 марта 2014 г.

Secure PostgreSQL over SSL.

Безопасная работа с PostgreSQL через SSL подключения.

Настройка PostgreSQL для работы с клиентами через SSL.


Сначала создаем центр сертификации (далее CA - Certificate Authority) с помощью которого мы будем выпускать сертификаты как для серверов так и для клиентов. CA можно создать где угодно, лишь бы был установлен пакет OpenSSL благо он установлен во всех дистрибутивах по-умолчанию

Перед тем как начать создаем каталог в котором будут размещаться все небходимые файлы и переходим в него. В этом каталоге будем выполнять все работы по созданию ключей и сертификтов.

Первым делом создаём корневой ключ для CA и затем создаем корневой сертификат CA.
# openssl genrsa -out rootCA.key 2048
# openssl req -x509 -new -key rootCA.key -days 10000 -out rootCA.crt

На этом центр сертификации создан. Переходим к созданию ключей и сертификатов для серверов и клиентов. Перед тем как начать, рекомендуется подумать над иерархией хранения всех ключей и сертификатов, представьте что через год у вас будет несколько десятков ключей, сертификатов для серверов, клиентов.
Итак, генерируем ключ для сервера. Имена выбираем произвольно, я выбрал очевидное server.*. Если же ключей будет много, то в качестве имен можно использовать имена хостов.
# openssl genrsa -out server.key 2048

Теперь создаем запрос на сертификат. При заполнении полей, в поле Common Name важно указать имя сервера: домен или IP адрес (например домен db.example.com)
# openssl req -new -key server.key -out server.csr

Подписываем запрос на сертификат нашим корневым сертификатом.
# openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000

Теперь проделывем эту (три последних команды) операцию снова, но уже создаем связку ключ-сертификат для потенциального клиента. Имена файлов соответственно меняем (например client.key, client.crt, client.csr). В поле Common Name указываем логин под которым будет выполняться подключение к БД.

Теперь когда с ключами покончено, переходим к настройке postgres. Копируем корневой сертифкат CA, ключ и сертификат сервера в каталог БД.
# cp server.key /var/db/pgsql/9.3/data
# cp server.crt /var/db/pgsql/9.3/data
# cp rootCA.crt /var/db/pgsql/9.3/data
# chown postgres: /var/db/pgsql/9.3/data/server.{crt,key} /var/db/pgsql/9.3/data/rootCA.crt
# chmod 600 /var/db/pgsql/9.3/data/server.crt

Теперь переходим к правке конфигурации PostgreSQL. PostgreSQL должен быть собран с поддержкой SSL.
# vi postgresql.conf
ssl = on
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
ssl_renegotiation_limit = 512MB
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'rootCA.crt'
# vi pg_hba.conf
hostssl database_name           username           192.168.122.1/32        trust clientcert=1

После внесения изменений выполняем перезапуск PostgreSQL сервиса.
Переходим к настройке клиента. Копируем корневой сертификат CA и клиентские ключи на клиентскую машину в домашний каталог пользователя который будет осуществлять подключение. Каталог .postgresql и имена ключей выбраны не случайно, именно в нем и по таким именам осуществляется поиск ключей и сертификатов в процессе подключения.
# scp caserver.lo:client.key /home/username/.postgresql/postgresql.key
# scp caserver.lo:сlient.crt /home/username/.postgresql/postgresql.crt
# scp caserver.lo:rootCA.crt /home/username/.postgresql/root.crt
# chmod 600 /home/username/.postgresql/postgresql.key

На этом все, выполняем попытку подключения.
# psql -h 192.168.122.12 -U username database_name
SSL connection (cipher: ECDHE-RSA-AES256-SHA, bits: 256)

Строка с SSL шифром свидетельствует о том что подключение выполнено с использованием SSL.
Кому лень настраивать, есть видео процесса настройки
На этом все. 

На главную "Virtualizing Linux"

3 комментария:

  1. В pg_hba.conf нужно добавить опцию clientcert=1 чтобы сервер требовал сертификат от клиента. Иначе тоже будет ssl но без проверки сертификата клиента (раздел 17.9.1).

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. и кстати оно прописано в статье (и видео тоже), но строка широкая и параметр съехал на новую строку

      Удалить

Популярные сообщения

Профиль в Google+ Яндекс цитирования Яндекс.Метрика