Настройка SSL-шифрования подключений к базе данных

Незащищённое соединение с базой данных оставляет ваши данные открытыми для перехвата, что грозит утечками и нарушением требований безопасности. Мы настраиваем SSL-шифрование для PostgreSQL и MySQL, обеспечивая защиту всех подключений. Наша команда реализует проект под ключ — от аудита и генерации сертификатов до настройки серверов и клиентов, с последующей поддержкой и ротацией ключей без прерывания работы.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Настройка SSL-шифрования подключений к базе данных

Безопасность веб-приложенийСреднийот 1 дня до 3 дней
Часто задаваемые вопросы

Нешифрованное соединение с базой данных — одна из самых частых уязвимостей в веб-приложениях. Перехват трафика через MITM-атаку может раскрыть пароли, личные данные клиентов и коммерческую тайну. В проектах встречались случаи, когда разработчики годами работали по открытому каналу, не подозревая о рисках. По статистике, около 15% инцидентов в веб-приложениях связаны с незащищёнными подключениями к БД. Настройка SSL/TLS для PostgreSQL и MySQL — стандартная процедура, выполняемая под ключ с гарантией совместимости и zero-downtime.

Почему SSL-шифрование базы данных — это не опция, а необходимость?

Требования PCI DSS, GDPR и SOC 2 прямо предписывают шифрование данных при передаче. Даже если ваш проект не подпадает под эти стандарты, безопасность должна быть в приоритете. Мы настраиваем SSL для PostgreSQL и MySQL с учётом вашей инфраструктуры — от самоподписанных ключей до интеграции с Let's Encrypt или внутренним CA.

Что входит в настройку SSL для БД: ключевые этапы

  • Аудит текущей конфигурации — проверка использования SSL, версий TLS, типов ключей.
  • Генерация или получение сертификатов — самоподписанные или через Let's Encrypt / внутренний CA.
  • Настройка сервера БД — PostgreSQL (postgresql.conf, pg_hba.conf) или MySQL (mysqld.cnf).
  • Настройка клиентских подключений — библиотеки pg, psycopg2, mysql2 и т.д.
  • Ротация ключей без даунтайма — по методике, описанной ниже.
  • Мониторинг срока действия — скрипты и оповещения в Slack/Telegram.
  • Документация и обучение команды — инструкции по поддержке.

Как проверить, что SSL включён?

Выполните запрос SELECT ssl, client_addr, version, cipher FROM pg_stat_ssl JOIN pg_stat_activity USING (pid) WHERE datname = current_database(); для PostgreSQL. Если вернулась строка с ssl = t, соединение шифруется. Для MySQL проверьте SHOW VARIABLES LIKE 'have_ssl'; — должно быть YES. Мы автоматизируем эту проверку в рамках услуги.

Как мы настраиваем SSL для PostgreSQL и MySQL?

PostgreSQL: серверная часть

Пример генерации и конфигурации сертификата

Генерируем сертификат (для продакшна используем Let's Encrypt или внутренний CA):

openssl req -new -x509 -days 365 -nodes \
  -out /etc/ssl/certs/postgresql.crt \
  -keyout /etc/ssl/private/postgresql.key \
  -subj "/CN=db.company.internal"
chmod 600 /etc/ssl/private/postgresql.key
chown postgres:postgres /etc/ssl/certs/postgresql.crt /etc/ssl/private/postgresql.key

Включаем SSL в postgresql.conf и принудительно требуем его в pg_hba.conf:

# postgresql.conf
ssl = on
ssl_cert_file = '/etc/ssl/certs/postgresql.crt'
ssl_key_file = '/etc/ssl/private/postgresql.key'
ssl_ca_file = '/etc/ssl/certs/ca.crt'
ssl_min_protocol_version = 'TLSv1.2'
ssl_ciphers = 'HIGH:!aNULL:!MD5'

# pg_hba.conf
hostssl all all 10.0.0.0/8 scram-sha-256
host all all 10.0.0.0/8 reject

MySQL: серверная часть

# /etc/mysql/mysql.conf.d/mysqld.cnf
ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
require_secure_transport=ON

Для конкретного пользователя выполните запрос ALTER USER 'app_user'@'%' REQUIRE SSL; или с сертификатом: REQUIRE X509;.

Пример клиентской настройки (Node.js с pg)

const { Pool } = require('pg');
const pool = new Pool({
  host: 'db.company.internal',
  ssl: {
    rejectUnauthorized: true,
    ca: fs.readFileSync('/etc/ssl/certs/ca.crt'),
    cert: fs.readFileSync('/etc/ssl/certs/client.crt'),
    key: fs.readFileSync('/etc/ssl/private/client.key'),
  }
});

Как выполняется ротация сертификатов без даунтайма?

Классический подход — использовать объединённый CA-файл, чтобы старый и новый CA были активны одновременно. Например, cat old-ca.crt new-ca.crt > combined-ca.crt, затем pg_ctl reload. После обновления клиентских сертификатов убираем старый CA. Никакого простоя.

Мониторинг срока действия сертификатов

Автоматизируем проверку и оповещаем команду за 30 дней до истечения. Пример скрипта:

EXPIRY=$(openssl x509 -in /etc/ssl/certs/postgresql.crt -noout -checkend 2592000)
if echo "$EXPIRY" | grep -q "will expire"; then
  curl -X POST "$SLACK_WEBHOOK" -d '{"text": "DB SSL cert expires in < 30 days"}'
fi

Сравнение подходов: самоподписанный vs Let's Encrypt vs внутренний CA

Параметр Самоподписанный Let's Encrypt Внутренний CA
Стоимость Бесплатно Бесплатно Бесплатно (если есть PKI)
Срок действия до 365 дней 90 дней любой
Автоматическое обновление Нет Да (certbot) Зависит от PKI
Проверка клиентом Нужно добавлять CA в доверенные Поддерживается всеми клиентами Требует установки корневого сертификата
Рекомендуем для Тестовые среды, внутренние сервисы Продакшн с публичными доменами Крупные организации с собственным PKI

Наш опыт: для 70% клиентов используем Let's Encrypt — это баланс удобства и безопасности. Для compliance-проектов — внутренний CA.

План работ по настройке SSL

Этап Действия Примерный срок
Анализ Проверка текущей конфигурации, версий TLS, типов сертификатов 2–4 часа
Генерация сертификатов Создание сертификатов через Let's Encrypt или CA 1–2 часа
Настройка сервера Изменение postgresql.conf / mysqld.cnf, pg_hba.conf 2–3 часа
Настройка клиентов Обновление строк подключения, библиотек 2–4 часа
Тестирование Проверка шифрования, производительности, отказоустойчивости 2–3 часа
Документация Инструкции для команды, регламент ротации 1–2 часа

Сроки и стоимость настройки SSL-подключений к БД

Настройка SSL для PostgreSQL или MySQL с нуля занимает 1–2 рабочих дня. Если у вас уже есть сертификаты — быстрее. Своевременная настройка SSL предотвращает утечки: средний ущерб от инцидента может составлять около $9k–13k, а экономия на штрафах PCI DSS — значительную сумму. Свяжитесь с нами — отправьте конфигурацию вашей БД, и мы оценим сроки и стоимость. Закажите настройку SSL для вашей базы данных.

Типичные сложности при внедрении SSL

  • Использование sslmode=require без проверки сертификата — уязвимо для MITM.
  • Неправильные права доступа к ключевым файлам (должны быть 600).
  • Забывают настроить мониторинг истечения сертификатов — неожиданный downtime.
  • Используют одинаковые сертификаты на все серверы — усложняет отзыв.

Мы в каждом проекте проверяем эти моменты. Закажите настройку SSL для вашей базы данных — поможем сделать правильно и надёжно.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1543
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1395
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1374
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060