SSL-соединение работает с клиентом MySQL, но не с Perl DBI: MariaDB - PullRequest
1 голос
/ 15 марта 2019

У меня есть сервер MariaDB, настроенный с самозаверяющими сертификатами для подключения с использованием TLS.Это работает, когда я соединяюсь с соответствующим клиентом

$ mysql -u xxxx -h xx.xx.xx.xx -p 
\s shows:
mysql  Ver 15.1 Distrib 10.1.37-MariaDB, for debian-linux-gnu (x86_64)     
SSL:   Cipher in use is DHE-RSA-AES256-SHA

.my.cnf содержит:

$ cat ~/.my.cnf 
[client]
ssl-cert=/---path-deleted---/client-cert.pem
ssl-key=/---path-deleted---/client-key.pem

Проблема: мне не удается подключиться из сценария Perl с этими настройками,Без SSL скрипт работает.Как только я включаю SSL в сценарии (и применяю его на сервере), я получаю:

failed: SSL connection error: ASN: bad other signature confirmation

Когда я проверяю сертификаты с помощью openssl, я получаю

$ openssl verify ca-cert.pem client-cert.pem server-cert.pem 

error 18 at 0 depth lookup: self signed certificate

сертификаты действительно являются самозаверяющими, и я хочу сохранить их таким образом.

Если я использую "mariadb_ssl_verify_server_cert = 0", я получу

failed: SSL connection error: Enforcing SSL encryption is not supported without mariadb_ssl_verify_server_cert=1

Что мне нужно изменить, чтобы иметьTLS-соединение работает с Perl?

Я копирую строки кода, которые у меня есть в моем саб-коннекторе для справки.Очень похожий код, используемый для работы в более старой системе с mysql (не mariadb), использующий просто mysql_ssl = 1 IIRC:

$self->{dsn} = "DBI:MariaDB:database=$database;host=$db_host;mariadb_ssl=1;".
    "mariadb_ssl_verify_server_cert=1;".
    "mariadb_ssl_ca_file=/---path---/ca-key.pem;".
    "mariadb_ssl_client_key=/---path---/client-key.pem;".
    "mariadb_ssl_client_cert=/---path---/client-cert.pem";
$self->{dbh} = DBI->connect($self->{dsn}, $db_user, $db_passwd,
            {'RaiseError' => 1, 'PrintError' => 1, AutoCommit => 1});
...