MySQL SHA256帐户的PHP访问被拒绝

时间:2016-07-15 15:31:26

标签: php mysql apache ssl

我已使用以下代码将OpenSSL 1.0.2h编译到MySQL 5.7.13服务器上的/ usr / local / openssl中:

tar xvzf openssl-1.0.2h.tar.gz -C /usr/local
cd /usr/local/openssl-1.0.2h
./config --prefix=/usr/local/openssl shared
make depend
make
make install

之后,我用MySQL配置了

cmake . -DMYSQL_DATADIR=/usr/local/mysql/dat -DWITH-SSL=/usr/local/openssl

当MySQL第一次启动时,它会在 / dat 目录中创建八个密钥/证书(.pem)文件:

  1. ca.pem
  2. CA-key.pem
  3. 客户cert.pem
  4. 客户key.pem
  5. private_key.pem
  6. public_key.pem
  7. 服务器cert.pem
  8. 服务器key.pem
  9. 在MySQL Workbench中,我可以看到可用服务器功能中的SSL已启用:

    • SSL可用性开启(绿点)

    并且在身份验证部分中标识了SHA256 / SSL文件:

    • SHA256密码私钥: private_key.pem
    • SHA256密码公钥: public_key.pem
    • SSL CA: ca.pem
    • SSL CA路径:不适用
    • SSL证书: server-cert.pem
    • SSL CRL:不适用
    • SSL CRL路径:不适用
    • SSL密钥: server-key.pem

    在Workbench的用户和权限部分,我创建了两个测试用户:

      

    ' user_standard' @'%'选择标准进行身份验证类型

         

    ' user_sha256' @'%'选择 SHA256密码进行身份验证类型

    在我的 my.cnf 文件中,我指定了以下内容:

    [client]
    ssl-ca = /usr/local/mysql/dat/ca.pem
    ssl-cert = /usr/local/mysql/dat/client-cert.pem
    ssl-key = /usr/local/mysql/dat/client-key.pem
    
    [mysqld]
    ssl-ca = /usr/local/mysql/dat/ca.pem
    ssl-cert = /usr/local/mysql/dat/server-cert.pem
    ssl-key = /usr/local/mysql/dat/server-key.pem
    ssl-cipher = DHE-RSA-AES256-SHA
    

    "状态" MySQL服务器的内容如下:

    mysql> status
    --------------
    ./bin/mysql  Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using   EditLine wrapper
    
    Connection id:           4
    Current database:        mysql
    SSL:                     Cipher in use is DHE-RSA-AES256-SHA
    Current page:            stdout
    Using outfile:           ''
    Using delimiter:         ;
    Server version:          5.7.13-debug-log Source distribution
    Protocol version:        10
    Connection:              Localhost via UNIX socket
    Server characterset:     utf8
    Db     characterset:     utf8
    Client characterset:     utf8
    Conn.  characterset:     utf8
    UNIX socket:             /tmp/mysqld.sock
    

    我有一个运行 Apache 2.4.10 的单独客户端服务器(使用 - with-ssl = / usr / local / openssl 配置), PHP 7.0 .7 (使用 - with-openssl = / usr / local / openssl 配置)和相同的 OpenSSL 1.0.2h (使用配置) --prefix = / usr / local / openssl shared )。我的phpinfo.php文件显示 OpenSSL支持 已启用,其库/标题版本确实 1.0.2h

    然后我将MySQL服务器中的 ca.pem server-cert.pem server-key.pem 文件复制到Apache / PHP服务器并创建了一个目录来放入它们: / usr / local / openssl / ssl / mysql /

    这是我的PHP代码,即成功!"使用[user_standard]的凭据,但我明白了,

      

    警告: mysqli_real_connect():( HY000 / 1045):用户访问被拒绝' user_sha256' (使用密码:是)

    只需切换 $ user $ pass 变量即可以[user_sha256]身份登录。其他一切都是一样的。

    $conn = mysqli_init();
    $conn->options (MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
    $conn->ssl_set ('/usr/local/openssl/ssl/mysql/server-key.pem', '/usr/local/openssl/ssl/mysql/server-cert.pem', '/usr/local/openssl/ssl/mysql/ca.pem', NULL, 'DHE-RSA-AES256-SHA');
    
    $serv = 'MySQL_Server_5.7.13_Auto_Generated_Server_Certificate';
    $user = 'user_standard';  // Switching to 'user_sha256' = Permission denied
    $pass = 'user_standard';  // Switching to 'user_sha256' = Permission denied
    $data = 'test';
    
    $conn->real_connect ($serv, $user, $pass, $data, 3306, NULL, MYSQLI_CLIENT_SSL);
    
    if (!$conn) {
        die ('Connect error (' . mysqli_connect_errno(). '): ' . mysqli_connect_error() . "\n");
    } else {
        echo "Success!";
    }
    
    $conn->close();
    

    我不了解差异和/或可能需要以不同方式配置以允许PHP连接到SHA256帐户。

    顺便说一句,MySQL服务器和Apache / PHP服务器都是: CentOS Linux版本7.2.1511(核心)

0 个答案:

没有答案