我正在为自己清除一些涉及到 MYSQL 的远程 SSL 连接的信息。特别是,一旦我设置了 MYSQL 以启用 SSL 并且有一个需要 SSL 的远程用户。
这就是我使用需要 SSL 的用户远程连接(命令行)到 MYSQL 的方式:
mysql -uMyUserName -p -h192.168.5.5 --ssl-ca /path/to/ca.pem
我的问题是:为什么我必须提供 ca.pem 文件作为客户端?
这些是我在服务器上安装 mysql 并设置远程访问 (Ubuntu) 所采取的步骤:
为 MYSQL 启用 SSL 的步骤
1) 获取我的证书颁发机构证书、数据库证书、数据库 key
- ca.pem(证书颁发机构证书)
- dbcert.pem(数据库证书)
- dbkey.pem(数据库 key )
2) 在[mysqld]下的/etc/mysql/my.cnf中添加以下行
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/dbcert.pem
ssl-key=/path/to/dbkey.pem
3) 重新启动 mysql 并通过登录并键入以下内容确认启用 ssl:
show variables like '%ssl%';
配置需要SSL的远程连接
1) 注释掉/etc/mysql/my.cnf中的以下几行
#bind-address
#skip-networking
2) 登录到 mysql 并授予用户访问权限,在本例中是访问每个数据库
GRANT ALL PRIVILEGES ON . to 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' REQUIRE SSL
此时,我已设置 MYSQL 以启用 SSL && 我有一个需要 SSL 才能登录的远程用户。我可以登录远程命令行,但我需要指定 --ssl-ca。
为什么我必须从客户端提供 ssl-ca?有没有办法让我不必这样做?
我真的很感激这里的一些见解。
提前致谢。
最佳答案
与典型的 Web 浏览器不同,mysql
等命令行工具没有内置的证书颁发机构列表。浏览器带有一个内置的证书颁发机构列表,您绝对信任它们(无论您是否知道)。
当您使用mysql
登录支持加密的MySQL 服务器时,该服务器将向您出示证书的公共(public)部分。要完成安全握手,您的客户端需要验证服务器证书是否由受信任的证书颁发机构签署。否则,它将不得不说“嘿,这看起来像是一个格式正确的证书,但我从未听说过 ca 签署它。”
对于 Hibernate/JDBC/TLS,一些搜索引擎工作会提供一些有用的建议。这一切都是关于在您的配置中设置正确的属性。
http://razorsql.com/articles/mysql_ssl_jdbc.html
How can I configure Hibernate to use SSL to talk to the DB server?
关于MYSQL远程连接需要SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32377644/