Налаштування SSL-шифрування підключень до бази даних

Незашифроване з'єднання з базою даних — одна з найчастіших вразливостей у веб-додатках. Перехоплення трафіку через MITM-атаку може розкрити паролі, особисті дані клієнтів та комерційну таємницю. У проєктах траплялися випадки, коли розробники роками працювали по відкритому каналу, не підозрюючи про р

Розробка та обслуговування будь-яких видів сайтів:

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування SSL-шифрування підключень до бази даних
Середній
від 1 дня до 3 днів

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Незашифроване з'єднання з базою даних — одна з найчастіших вразливостей у веб-додатках. Перехоплення трафіку через 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 запобігає витокам: середній збиток від інциденту може становити мільйони гривень, а економія на штрафах PCI DSS — значну суму. Зв'яжіться з нами — надішліть конфігурацію вашої БД, і ми безкоштовно оцінимо терміни та вартість. Замовте налаштування SSL для вашої бази даних.

Типові складнощі при впровадженні SSL

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

Ми в кожному проєкті перевіряємо ці моменти. Замовте налаштування SSL для вашої бази даних — допоможемо зробити правильно та надійно.