У меня есть сервер 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 подписи.
Клиент проверяет подлинность сервера, а не наоборот.