Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过SSL访问远程数据库?_Php_Mysql_Ssl_Ssh - Fatal编程技术网

Php 如何通过SSL访问远程数据库?

Php 如何通过SSL访问远程数据库?,php,mysql,ssl,ssh,Php,Mysql,Ssl,Ssh,我需要通过SSL访问远程DB服务器,但在执行mysql命令时无法连接到DB服务器。任何帮助都将不胜感激 我所做的: 创建了.pem文件 [AP Server] --> [DB Server] (over SSL) 更改了我的.cnf /tmp/ca-cert.pem /tmp/server-cert.pem /tmp/server-no-password-key.pem 重新启动mysql并检查设置 [mysqld] ssl-ca=/tmp/ca-cert.pem ssl-cert

我需要通过SSL访问远程DB服务器,但在执行mysql命令时无法连接到DB服务器。任何帮助都将不胜感激

我所做的:

  • 创建了.pem文件

    [AP Server] --> [DB Server] (over SSL)
    
  • 更改了我的.cnf

    /tmp/ca-cert.pem
    /tmp/server-cert.pem
    /tmp/server-no-password-key.pem
    
  • 重新启动mysql并检查设置

    [mysqld]
    ssl-ca=/tmp/ca-cert.pem
    ssl-cert=/tmp/server-cert.pem
    ssl-key=/tmp/server-no-password-key.pem
    
  • 从AP服务器到DB服务器密钥的SSH访问

    $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服务器到DB服务器的mysql访问

    ssh dbserver // pubkey login is ok.
    
  • 供参考:

    DB服务器不允许ssh密码身份验证。只允许pubkey登录

    谢谢


    更新

    我的第一个目标是从AP服务器运行这个PHP脚本。这个脚本在DB服务器中工作

    $ 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)
    
    关于防火墙,端口3306已关闭。我想我使用SSL时不需要打开。事实上,即使3306关闭,sequel pro(sql客户端应用程序)也可以连接到DB。SSH私钥设置可能是导致


    更新3

    一些网站显示SSH端口转发。那要容易得多。。。创建.pem文件和设置只是浪费我的时间。。。。?我会检查的


    更新4

    成功了

    mysql> SHOW GRANTS FOR user1;
    ------------------------------------------------+
    | GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*******************' WITH GRANT OPTION |
    +---------------------------------------------------------------------------------------------------------------------------------+
    
    我仍然不确定的是,pem设置是否必要。当我删除mysqli_ssl_集时,我可以通过tcpdump查看原始数据。我认为ssh转发会在整个公共网络中加密数据。。。这没有道理

    ssh user1@dbserver -p 22 -g -N -f -L 12345:localhost:3306
    mysql -uuser1 -p -h 127.0.0.1 –port=12345
    

    还是有问题还是你自己解决了?如果是,请将答案发布为答案,而不是编辑。关于防火墙,端口3306已关闭。我想我使用SSL时不需要打开。嗯,是的,你知道。这里的整个问题似乎在SSL和SSH之间发生了变化,这两个东西是不相关的。
    ssh user1@dbserver -p 22 -g -N -f -L 12345:localhost:3306
    mysql -uuser1 -p -h 127.0.0.1 –port=12345
    
    sudo tcpdump -nxX -s 2000 port 3306 -ilo