Назад | Перейти на главную страницу

MariaDB о трудностях CentOS 8 и TLS

У меня есть сервер MariaDB на машине CentOS 8 (mariadb-10.3.17) и клиент (openSUSE Leap 15.1) с mariadb 10.2.31

Я настроил сервер с TLS следующим образом:

[mysqld]
...
ssl_cert = /etc/pki/tls/certs/dbsrv.example.com_crt.pem
ssl_key = /etc/pki/tls/private/dbsrv.example.com_key.pem
ssl_ca  = /etc/pki/tls/certs/dbsrv.example.com_chain.pem
ssl-cipher = kEECDH:+kEECDH+SHA:kEDH:+kEDH+SHA:+kEDH+CAMELLIA:kECDH:+kECDH+SHA:kRSA:+kRSA+SHA:+kRSA+CAMELLIA:!aNULL:!eNULL:!SSLv2:!RC4:!DES:!EXP:!SEED:!IDEA:!3DES
...

В dbsrv.example.com_chain.pem файл содержит сертификат цепочки (промежуточный сертификат и сертификат CA)

Я хочу включить TLS для все клиенты, включая клиента на виртуальной машине сервера MariaDB.
Таким образом, у меня есть этот раздел в /etc/my.cnf.d/client.cnf сервера

[client]
default-character-set = utf8mb4
ssl_cert = /etc/pki/tls/certs/dbsrv.example.com_crt.pem
ssl_key = /etc/pki/tls/private/dbsrv.example.com_key.pem
ssl_ca = /etc/pki/tls/certs/dbsrv.example.com_chain.pem
ssl-verify-server-cert = true

Да сертификаты одинаковые, раз уж мы говорим об одной машине!

И у меня есть этот раздел на /etc/my.cnf.d/clients.cnf openSUSE

[client]
default-character-set = utf8mb4
ssl_cert = /etc/my.cnf.d/certificates/jumphost.example.com_chain.pem
ssl_key = /etc/my.cnf.d/certificates/jumphost.example.com_key.pem
ssl-verify-server-cert = true

Эта установка не работает. Когда я пытаюсь подключиться с клиента на сервере (как пользователь root), я получаю эту ошибку:

Enter password: 
ERROR 2026 (HY000): SSL connection error: Validation of SSL server certificate failed
If I make the client as follows: 

[client]
default-character-set = utf8mb4
ssl_cert = /etc/my.cnf.d/certificates/jumphost.example.com_chain.pem
ssl_key = /etc/my.cnf.d/certificates/jumphost.example.com_key.pem

(то есть, если я удалю ssl-verify-server-cert = true, Я жестяная банка подключиться от mysql клиент на сервер но не из openSUSE.


So, my questions are:  
1. Why is client from the server not connected? My suspicion is on the private key permissions. But then, if I make the private key readable by anyone, it's not secure anymore.  

I fixed this by creating a new dba group and added the users that can access mysql command and the relevant certificates. The Private Key is owned from `root:dba` and the permissions are `640`

2. What I am setting wrong and I cannot have 2-way verification on my TLS connections?  

Log files are not helpful (no error messages) and the -v doesn't help either, no information. 

1) Как вы подозреваете, это связано с ключевыми разрешениями.

2) Их нет.

3) Кажется, вы неправильно понимаете, как это работает. На сервере необходимо:

  • Сертификат SSL

  • Ключ SSL

На клиенте вам понадобится сертификат CA подписи.

Клиент проверяет подлинность сервера, а не наоборот.