如何调试 MariaDB SSL 连接?

如何调试 MariaDB SSL 连接?

自从从 MySQL 转移到 Debian 9 上较新的 MariaDB 安装后,我一直在努力解决 SSL 连接问题。

我创建了一个 CA 证书并将其安装在服务器和客户端上。然后,我创建了服务器和客户端密钥以及使用 CA 证书签名的证书。

有效的方法:

我可以使用 mysql 客户端从客户端连接到服务器,无需 SSL 连接。

我可以使用 openssl 验证客户端证书:

$ openssl verify MariaDB_client.crt 

MariaDB_client.crt: OK

我知道 MariaDB 使用 yaSSL,但我认为这仍然表明证书和 CA 是正确的。

在服务器上,我有:

MariaDB> show global variables like '%ssl%';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| have_openssl        | NO                                   |
| have_ssl            | YES                                  |
| ssl_ca              | /etc/mysql/conf.d/MariaDB_ca.crt     |
| ssl_capath          |                                      |
| ssl_cert            | /etc/mysql/conf.d/MariaDB_server.crt |
| ssl_cipher          |                                      |
| ssl_crl             |                                      |
| ssl_crlpath         |                                      |
| ssl_key             | /etc/mysql/conf.d/MariaDB_server.key |
| version_ssl_library | YaSSL 2.4.4                          |
+---------------------+--------------------------------------+

什么是不是工作:

如果我将包含以下内容的 .my.cnf 文件添加到用户的 $HOME 目录...

[client]
ssl-ca=/--path--/MariaDB_ca.crt
ssl-cert=/--path--/MariaDB_client.crt
ssl-key=/--path--/MariaDB_client.key

...连接失败:

ERROR 2026 (HY000): SSL connection error: unable to verify peer checksum

在服务器日志中,我发现(不确定这是否相关):

[Warning] IP address 'ip.of.connecting.client' could not be resolved: Name or service not known

我的问题:

  • 我如何缩小/调试此连接问题?

  • 我发现关于服务器和客户端证书是否应使用相同或不同的 CN 存在矛盾的信息。目前,我使用相同的 CN。

  • 证书是否需要特殊的访问权限?

答案1

经过几个小时的尝试,一切终于成功了。

关键的一步是使用服务器的 IP 作为通用名称(CN)在服务器证书中(实际上是签名的 csr 授予证书),而不是某些说明建议的任意主机名。我发现很多资料在这方面是矛盾的。

我使用的是与 Debian 9 一起发行的 MariaDB,链接到 yaSSL 库。OpenSSL 的情况可能有所不同。它们肯定与 MySQL 不同。

相关内容