我发现通过 Linux 命令行保存远程 SSL 证书但在 MySQL(以及 TLS)的情况下,它不起作用。
所以问题是 - 如何检查与 MySQL 的 TLS 连接的远程证书?
答案1
MySQL 不在端口上使用直接 SSL(如果使用,就不可能对未加密和加密连接使用相同的 TCP/3306 端口,同样,也不可能对 HTTP 和 HTTPS 流量使用端口 TCP/80)。
它还不使用一些简单的文本 STARTTLS 命令从未加密切换到 SSL 加密连接(如 IMAP、POP3、FTP、SMTP、XMPP 等使用)。相反,它使用自己的二进制协议来协商 mysql 选项(SSL 只是其中之一)。您可以在 mysql 源代码中的 sql_real_connect() 函数中看到它的工作原理。
因此,要获得所需的结果,您需要编写自定义程序来模拟 SSL libmysql 连接,但在此过程中输出带有 SSL 证书的额外调试信息。好的起点可能是来自 mysql 源代码的 sql-common/client.c(查找 CLIENT_SSL)。不幸的是,我不知道已经编写了任何此类程序(不是我没有看过,只是没有找到)。
或者,如果您可以通过 ssh/NRPE 访问服务器,您可以轻松地破解脚本以使用 openssl(1) 直接从 mysqld 正在使用的 PEM 文件显示证书,这会容易得多。
答案2
OpenSSLs_client
命令的最新版本支持该-starttls mysql
标志。如果添加该标志,您还可以检查 MySQL 服务的证书。