我曾尝试寻找这个问题的答案,但却一无所获。
我有一个 LetsEncrypt 颁发的证书,用于满足我的所有 SSL 需求。它对我尝试使用的所有 DNS 名称都有效。今天我尝试让它在 MySQL 上运行,但 MySQL 坚持使用自己的自签名证书。
MySQL 版本是来自 Ubuntu 软件包的 8.0.26-0ubuntu0.20.04.2。
我已经创建了 /etc/mysql/mysql.conf.d/zz-ssl.conf,内容如下:
[mysqld]
ssl-ca=/etc/ssl/certs/local/mainchain.pem
ssl-cert=/etc/mysql/cert.pem
ssl-key=/etc/mysql/cert.pem
[system_default_sect]
MinProtocol = TLSv1.2
但日志上却写着:
2021-08-08T16:16:57.982003Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2021-08-08T16:16:57.982227Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2021-08-08T16:16:57.983344Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
我尝试删除 /var/lib/mysql/*.pem ... 但当我重新启动 mysql 时,所有这些文件都带有更新的时间戳。MySQL 似乎决定使用自己的自签名证书,而不是我配置的证书。我想我遗漏了一些本应显而易见但却并非如此的东西。
我的配置中引用的文件 /etc/mysql/cert.pem 归 mysql:mysql 所有,并具有 0600 权限。它是我用于其他一切的证书文件的副本,它包含服务器证书、私钥和 LetsEncrypt 颁发证书。
答案1
我终于搞明白了。配置文件必须有 .cnf 文件扩展名,否则 mysql 会忽略它们。修复这个问题后,我遇到了权限问题——我已将证书文件拆分为三个单独的文件,但其他两个文件归 root:root 所有。修复这个问题后,一切都正常了。