自从从 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 不同。