代码之家  ›  专栏  ›  技术社区  ›  Odyssee

通过SSL与Laravel的MySQL连接

  •  1
  • Odyssee  · 技术社区  · 7 年前

    在Laravel应用程序中,通过ssl连接到数据库时出现问题。我的配置如下:

           'mysql' => [
                'driver' => 'mysql',
                'host' => env('DB_HOST', '127.0.0.1'),
                'port' => env('DB_PORT', '3306'),
                'database' => env('DB_DATABASE', 'forge'),
                'username' => env('DB_USERNAME', 'forge'),
                'password' => env('DB_PASSWORD', ''),
                'unix_socket' => env('DB_SOCKET', ''),
                'charset' => 'utf8mb4',
                'collation' => 'utf8mb4_unicode_ci',
                'prefix' => '',
                'strict' => true,
                'engine' => null,
                'sslmode' => 'require',
                'options'   => array(
                    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
                    PDO::MYSQL_ATTR_SSL_KEY => '/certs/client-key.pem',
                    PDO::MYSQL_ATTR_SSL_CERT => '/certs/client-cert.pem',
                    PDO::MYSQL_ATTR_SSL_CA => '/certs/ca.pem',
                ),
            ],
    
    DB_CONNECTION=mysql
    DB_HOST=xxx.xxx.xxx.xxx
    DB_PORT=3306
    DB_DATABASE=db_name
    DB_USERNAME=db_user
    DB_PASSWORD=xxxx
    

    这些设置在MySQL服务器上给了我以下错误。

    2018-10-30T09:18:25.403712Z 71 [Note] Access denied for user 'user'@'xxx.xxx.xxx.xxx' (using password: YES)
    

    mysql -u user -p -h xxx.xxx.xxx.xxx --ssl-ca=/certs/ca.pem --ssl-cert=/certs/client-cert.pem --ssl-key=/certs/client-key.pem
    

    与上述命令连接时在客户端上执行的`\s'命令的输出。

    mysql  Ver 15.1 Distrib 10.1.26-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
    
    Connection id:      16
    Current database:   database
    Current user:       user@xxx.xxx.xxx.xxx
    SSL:            Cipher in use is DHE-RSA-AES256-SHA
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:    ;
    Server:         MySQL
    Server version:     5.7.24-0ubuntu0.18.10.1 (Ubuntu)
    Protocol version:   10
    Connection:     167.99.215.179 via TCP/IP
    Server characterset:    latin1
    Db     characterset:    latin1
    Client characterset:    utf8mb4
    Conn.  characterset:    utf8mb4
    TCP port:       3306
    Uptime:         23 min 29 sec
    
    Threads: 2  Questions: 38  Slow queries: 0  Opens: 135  Flush tables: 1  Open tables: 128  Queries per second avg: 0.026
    --------------
    

    应用程序在基于 php:7.2.11-fpm 形象。并配置了以下php扩展。

    RUN docker-php-ext-install bcmath zip pdo_mysql json tokenizer

    MySQL版本:

    Server version: 5.7.24-0ubuntu0.18.10.1 (Ubuntu)
    

    PHP 7.2.11 (cli) (built: Oct 16 2018 00:46:29) ( NTS )
    

    PDO版本:

    PDO
    
    PDO support => enabled
    PDO drivers => sqlite, mysql
    
    pdo_mysql
    
    PDO Driver for MySQL => enabled
    Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387
    

    OpenSSL版本:

    openssl
    
    OpenSSL support => enabled
    OpenSSL Library Version => OpenSSL 1.1.0f  25 May 2017
    OpenSSL Header Version => OpenSSL 1.1.0f  25 May 2017
    Openssl default config => /usr/lib/ssl/openssl.cnf
    
    Directive => Local Value => Master Value
    openssl.cafile => no value => no value
    openssl.capath => no value => no value
    

    2 回复  |  直到 7 年前
        1
  •  5
  •   Odyssee    7 年前

    我终于解决了这个问题。上面的配置实际上是好的。我直接在码头集装箱里工作。出于某种原因,配置文件被保存在缓存中。

    以下命令未清除配置缓存:

    php artisan config:clear
    php artisan config:cache
    php artisan cache:clear
    

    当我创建一个新用户来连接数据库来测试一些东西时,我注意到了这一点。我用新的配置重建了容器,现在一切都正常了。

        2
  •  1
  •   WebguruInfosystems    7 年前
    1. 请检查你的.env文件。此文件将位于网站根文件夹中。

      DB_CONNECTION=mysql
      DB_HOST=hostip
      DB_PORT=3306
      DB_DATABASE=database_name
      DB_USERNAME=database_user_name
      DB_PASSWORD=database_password
      

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'sslmode' => env('DB_SSLMODE', 'prefer'),
            'options'   => array(
                PDO::MYSQL_ATTR_SSL_CA      => '/home/.../ca-cert.pem',
                PDO::MYSQL_ATTR_SSL_CERT    => '/home/.../cert.pem',
                PDO::MYSQL_ATTR_SSL_KEY     => '/home/.../key.pem'
            ),
            'strict' => true,
            'engine' => null,
        ],