返回

MySQL SSL 设置错误:SSL_CTX_set_default_verify_paths 失败的解决方法

Linux

引言

在 MySQL 中启用 SSL 以保护数据库通信非常重要。但是,在 Ubuntu 上执行此操作时,可能会遇到错误:SSL_CTX_set_default_verify_paths failed。本文将引导您逐步解决此错误,并深入探讨其原因和解决方案。

SSL 证书和密钥

首先,确保您拥有正确的 SSL 证书和密钥文件,包括 ssl_certssl_keyssl_ca。这些文件应位于 MySQL 用户可读取的目录中。使用命令 sudo -u mysql cat /opt/mysql/keys/tls-key.pem 验证文件权限。

OpenSSL 配置

OpenSSL 需要正确配置以验证证书链。检查 /etc/ssl/openssl.cnf 文件中的以下设置:

[ ca ]
default_ca = CA_default

[ CA_default ]
dir = /etc/ssl/certs
certs = $dir/ca-certificates.crt
crl_dir = $dir/crl

MySQL 配置

/etc/mysql/mysql.conf.d/mysqld.cnf 文件中,添加以下行以启用 SSL:

[mysqld]
ssl-ca=/opt/mysql/keys/ca.pem
ssl-cert=/opt/mysql/keys/tls.pem
ssl-key=/opt/mysql/keys/tls-key.pem

重新启动 MySQL

应用更改后,使用 sudo systemctl restart mysql 命令重新启动 MySQL 服务。

常见原因

证书和密钥不匹配

确保 ssl_certssl_key 使用的证书和密钥文件相互匹配。

权限不足

MySQL 用户应具有读取证书和密钥文件的权限。

OpenSSL 配置不正确

验证 OpenSSL 已正确配置为验证证书链。

MySQL 配置错误

确保 MySQL 配置文件中的 SSL 设置正确。

防火墙限制

检查防火墙是否允许访问 MySQL 端口(通常为 3306)。

解决方案

解决方案 1:检查证书和密钥匹配性

确保 ssl_certssl_key 文件是同一证书和密钥的副本。您可以使用以下命令比较两个文件的内容:

diff /opt/mysql/keys/tls-key.pem /opt/mysql/keys/tls.pem

如果文件不匹配,请获取正确的文件并更新配置。

解决方案 2:设置正确的文件权限

确保 MySQL 用户具有读取证书和密钥文件的权限。使用以下命令更改文件权限:

sudo chown mysql:mysql /opt/mysql/keys/*
sudo chmod 600 /opt/mysql/keys/*

解决方案 3:验证 OpenSSL 配置

检查 /etc/ssl/openssl.cnf 文件中的配置是否正确。确保 dircerts 路径指向正确的目录。

解决方案 4:检查 MySQL 配置文件

确保 /etc/mysql/mysql.conf.d/mysqld.cnf 文件中的 SSL 设置正确无误。

解决方案 5:检查防火墙设置

确保防火墙允许访问 MySQL 端口。使用以下命令打开端口:

sudo ufw allow 3306/tcp

结论

遵循这些步骤,您可以解决 SSL_CTX_set_default_verify_paths failed 错误,并在 MySQL 中成功启用 SSL。加密数据库通信对于保护敏感数据至关重要,因此采取必要措施来确保您的数据库安全至关重要。

常见问题解答

  1. 为什么会出现此错误?

    • 此错误通常是由证书验证失败引起的,例如证书链不完整或 OpenSSL 未正确配置。
  2. 如何检查 OpenSSL 配置?

    • 使用 openssl version -a 命令检查 OpenSSL 版本和配置设置。
  3. 我可以使用其他 SSL 库吗?

    • 是的,MySQL 支持其他 SSL 库,例如 LibreSSL。但是,您需要修改 MySQL 配置以使用不同的库。
  4. 如何更新 SSL 证书?

    • /etc/mysql/mysql.conf.d/mysqld.cnf 文件中更新 ssl_certssl_key 路径以指向新证书。
  5. 如果我仍然遇到问题该怎么办?

    • 检查 MySQL 错误日志(通常位于 /var/log/mysql/error.log)以获取更多信息。您还可以联系 MySQL 支持团队或社区论坛寻求帮助。