SSL连接适用于mysql客户端,但不适用于perl DBI:MariaDB

时间:2019-03-15 20:08:07

标签: perl ssl mariadb dbi

我有一个设置了自签名证书的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

要使Perl进行TLS连接,我需要更改什么?

我复制connect子中的代码行以供参考。以前使用mysql_ssl = 1 IIRC时,使用mysql(而非mariadb)的较旧系统上的代码非常相似:

$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});

0 个答案:

没有答案