【问题标题】:Connecting to mysql using ssl in Zend framework在 Zend 框架中使用 ssl 连接到 mysql
【发布时间】:2023-04-05 13:54:01
【问题描述】:

使用此代码,我可以正常使用 zend 框架连接到 mysql:

resources.db.adapter = "Pdo_Mysql"
resources.db.params.host = "xx.xx.xx.xx"
resources.db.params.username = "test_user"
resources.db.params.password = "test_pass"
resources.db.params.dbname = "test_database"
resources.db.params.port="xxxx"

;parameters here for ssl connection??

在我的Controller

  public function indexAction() {
        $config = new Zend_Config_Ini('/path/to/application.ini', 'development');
        $db = Zend_Db::factory($config->resources->db);
        $sql = 'SELECT * FROM test_table';
        $result = $db->fetchAll($sql);

        echo '<pre>';
        print_r($result);
    }

现在的问题是我想使用 ssl 连接到 mysql,但我还没有找到任何关于如何做到这一点的文档。

我在数据库管理员的帮助下,通过如下配置 ssl 连接,设法使用 Navicat 与服务器建立了连接:

现在的问题是如何使用php连接?

【问题讨论】:

    标签: php mysql zend-framework ssl


    【解决方案1】:

    您应该能够像这样指定驱动程序选项:

    ;PDO::MYSQL_ATTR_SSL_KEY
    resources.db.params.driver_options.1010 = "/path/to/client-key.pem"
    ;PDO::MYSQL_ATTR_SSL_CERT
    resources.db.params.driver_options.1011 = "/path/to/client-cert.pem"
    ;PDO::MYSQL_ATTR_SSL_CA
    resources.db.params.driver_options.1012 = "/path/to/ca-cert.pem"
    

    【讨论】:

    • 有点hacky(主要是因为它没有记录)但假设PDO可以处理字符串而不是整数作为“常量”值,这应该可以工作,+1
    • 感谢您的回复,但我仍然无法连接到 mysql。它给出了以下错误SQLSTATE[28000] [1045] Access denied for user 'test_user'@'xx.xx.xx.xx' (using password: YES) 。我仍然可以使用带有用户名的 Navicat 连接,通过和证书,如果我更改用户,我可以登录。我确认 PHP 已启用 Openssl。注意:test_user 由数据库管理员配置为仅使用 ssl 连接。
    • 顺便说一句,当我尝试 DaveRandom 的答案时遇到了同样的错误:(
    • @Songo 你是在同一台机器上运行 PHP 和 Navicat 吗? MySQL ACL 能够将用户限制为某些 IP 地址/主机名。
    • 是的,来自同一台机器。我正在运行 PHP 5.3.15 这会影响什么吗?
    【解决方案2】:

    来自http://php.net/manual/en/ref.pdo-mysql.php

    使用适当的PDO_MySQL constants 启用SSL 支持,这相当于调用» MySQL C API function mysql_ssl_set()。此外,不能使用 PDO::setAttribute 启用 SSL,因为连接已经存在。另请参阅有关 » connecting to MySQL with SSL 的 MySQL 文档。

    另见:http://php.net/manual/en/ref.pdo-mysql.php#103501

    您的 PHP 安装还需要 openssl 才能正常工作。

    【讨论】:

    • 感谢您的回复,但我在这里非常不知所措:) 这是否意味着我不能只在配置文件application.ini 中添加一些参数来让事情正常工作?也许是路径的一个选项?
    • @Songo Apparently not - 在 PDO_mysql 的范围内肯定可以工作,但 ZF 似乎还没有直接支持它。如果您可以获取底层 PDO 对象,那么您应该可以通过调用 PDO::setAttribute() 自己设置选项来完成此操作,但看起来好像没有办法让 ZF 为您完成这项工作。
    • framework.zend.com/svn/framework/standard/trunk/library/Zend/Db/… line: 130,也许你应该可以在 application.ini 中指定必要的常量
    • @DaveRandom 我尝试了您提供的link 中的代码示例,但我仍然无法连接到mysql。它给出了以下错误SQLSTATE[28000] [1045] Access denied for user 'test_user'@'xx.xx.xx.xx' (using password: YES) 。我仍然可以使用带有用户名的 Navicat 连接,通过和证书,如果我更改用户,我可以登录。我确认 PHP 已启用 Openssl。注意:test_user 由数据库管理员配置为仅使用 ssl 连接。
    • @DaveRandom btw 我在尝试 b.b3rn4d 的回答时遇到了同样的错误 :(
    【解决方案3】:

    我在 SSL 上的 Zend Db(适配器:Pdo_Mysql)的工作配置:

    Array
    (
        [host] => XX.XX.XX.XX
        [username] => nice-user
        [password] => ************
        [dbname] => database
        [driver_options] => Array
            (
                [1010] => /path/to/client-key.pem
                [1011] => /path/to/client-cert.pem
                [1012] => /path/to/ca-cert.pem
                [1013] => 
                [1014] => DHE-RSA-AES256-SHA
            )
    )
    

    如果您的应用程序是基于 Web 的,请确保 Apache 用户(Debian 上的“www-data”)可以读取上面列出的证书文件,我假设它是。

    【讨论】:

      【解决方案4】:

      要与 Zend 连接,请像这样设置您的 application.ini:

      ;PDO::MYSQL_ATTR_SSL_KEY = 1007
      resources.db.params.driver_options.1007 = "/path/to/client-key.pem"
      ;PDO::MYSQL_ATTR_SSL_CERT = 1008
      resources.db.params.driver_options.1008 = "/path/to/client-cert.pem"
      ;PDO::MYSQL_ATTR_SSL_CA = 1009
      resources.db.params.driver_options.1009 = "/path/to/ca-cert.pem"
      

      【讨论】:

      • 顺便说一句。选项“resources.db.params.driver_options.1009”中的数字 - 对于 PHP 7 是实际的,对于 PHP5.6,您将需要使用另一个数字,例如“resources.db.params.driver_options.1012”。发现从 PHP 5.6 切换到 PHP 7 时的细微差别
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-14
      • 2015-09-05
      相关资源
      最近更新 更多