[AP Server] --> [DB Server] (over SSL)
我需要通过SSL访问远程数据库服务器,但是当我执行mysql命令时,我无法连接到数据库服务器。任何帮助将不胜感激。
我做了什么:
创建了.pem文件。
/tmp/ca-cert.pem
/tmp/server-cert.pem
/tmp/server-no-password-key.pem
更改了my.cnf
[mysqld]
ssl-ca=/tmp/ca-cert.pem
ssl-cert=/tmp/server-cert.pem
ssl-key=/tmp/server-no-password-key.pem
重启mysql并检查设置
$mysql -u user1 -p --ssl-ca=/tmp/ca-cert.pem
mysql> show variables like '%ssl%';
+---------------+---------------------------------+
| Variable_name | Value |
+---------------+---------------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /tmp/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /tmp/server-cert.pem |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /tmp/server-no-password-key.pem |
+---------------+---------------------------------+
mysql> SHOW STATUS LIKE 'Ssl_cipher';
+---------------+--------------------+
| Variable_name | Value |
+---------------+--------------------+
| Ssl_cipher | DHE-RSA-AES256-SHA |
+---------------+--------------------+
从AP服务器到数据库服务器密钥的SSH访问
ssh dbserver // pubkey login is ok.
尝试从AP服务器到数据库服务器的mysql访问
$ mysql -u user1 -p -h dbserver --ssl-ca=/tmp/ca-cert.pem
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'dbserver' (110)
供参考:
DB Server不允许ssh密码验证。只允许使用pubkey登录
由于
更新
我的第一个目标是从AP服务器运行此PHP脚本。此脚本在DB Server中有效。
<?php
$dbh = mysqli_init();
$isSSL = mysqli_ssl_set(
$dbh,
'/tmp/server-no-password-key.pem',
'/tmp/server-cert.pem',
'/tmp/ca-cert.pem',
null,
null
);
$isConnected = mysqli_real_connect(
$dbh,
'dbserver',
'user1',
'user1-pass',
'dbname1',
3306,
null,
MYSQLI_CLIENT_SSL
);
$result = $dbh->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);
?>
UPDATE2
我觉得Grants没问题。
mysql> SHOW GRANTS FOR user1;
------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*******************' WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------+
关于防火墙,端口3306已关闭。我想在使用SSL时我不需要打开。事实上,续集pro(sql客户端应用程序)可以连接到DB甚至3306正在关闭。 SSH私钥设置可能是原因......
UPDATE3
有些网站显示SSH端口转发。这更容易......创建.pem文件和设置只是浪费我的时间....?我会检查一下。
UPDATE4
有效!
ssh user1@dbserver -p 22 -g -N -f -L 12345:localhost:3306
mysql -uuser1 -p -h 127.0.0.1 –port=12345
我还不确定.pem设置是否必要。当我删除mysqli_ssl_set时,我可以通过tcpdump看到原始数据。我认为ssh转发会加密整个公共网络的数据......这没有意义......
sudo tcpdump -nxX -s 2000 port 3306 -ilo