8.2.19. Налаштування SSL для MySQL

При встановленні та видаленні сертифіката виконується перезапуск інстансу.

Шифрування TLS/SSL використовується для захисту даних, що передаються між клієнтом і сервером. За допомогою цієї інструкції можна налаштувати шифрування з використанням власного SSL-сертифіката з перевіркою відповідності адреси хоста.

  1. Згенеруйте файли сертифіката та ключа (в команді замість example.mysql.network у двох рядках вкажіть адресу хоста вашого інстансу):
    openssl req -x509 -newkey rsa:2048 \
      -sha256 -days 365 \
      -nodes \
      -keyout server-key.pem \
      -out server-cert.pem \
      -subj "/CN=example.mysql.network" \
      -addext "subjectAltName=DNS:example.mysql.network" \
      -addext "keyUsage=digitalSignature,keyEncipherment" \
      -addext "extendedKeyUsage=serverAuth"
  2. Встановіть сертифікат у розділі «MySQL» на вкладці «Налаштування → SSL» (поле з паролем приватного ключа залиште порожнім, якщо не вказували його під час генерації сертифіката та ключа):
  3. Перевірте адресу хоста у встановленому сертифікаті (в команді використовуйте ваші дані для підключення: example.mysql.network — хост, 12345 — порт):
    openssl s_client -connect example.mysql.network:12345 -starttls mysql -showcerts </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -ext subjectAltName

    Без встановленого сертифіката вивід виглядає так:

    subject=CN = MySQL_Server_8.0.36-28_Auto_Generated_Server_Certificate
    issuer=CN = MySQL_Server_8.0.36-28_Auto_Generated_CA_Certificate
    No extensions in certificate

    Після встановлення сертифіката у виведенні буде адреса хоста вашого інстансу:

    subject=CN = example.mysql.network
    issuer=CN = example.mysql.network
    X509v3 Subject Alternative Name:
        DNS:example.mysql.network
  4. Підключіться до інстансу з використанням сертифіката та переконайтеся, що з’єднання зашифровано (в команді використовуйте ваші дані для підключення: example.mysql.network — хост, 12345 — порт, user — користувач):
    mysql -h example.mysql.network -P 12345 -u user -p \
      --ssl-mode=VERIFY_IDENTITY \
      --ssl-ca=server-cert.pem \
      -e "SHOW STATUS LIKE 'Ssl_cipher'; SHOW STATUS LIKE 'Ssl_version';"

    Якщо все налаштовано правильно, підключення проходить успішно і вивід виглядає так:

    +---------------+------------------------+
    | Variable_name | Value                  |
    +---------------+------------------------+
    | Ssl_cipher    | TLS_AES_256_GCM_SHA384 |
    +---------------+------------------------+
    +---------------+---------+
    | Variable_name | Value   |
    +---------------+---------+
    | Ssl_version   | TLSv1.3 |
    +---------------+---------+

При підключенні до інстансу через MySQL-клієнт вибирайте режим VERIFY_IDENTITY і в якості сертифіката CA використовуйте сертифікат сервера. Сертифікат і ключ клієнта не вказуйте.

Зміст