【问题标题】:Not able to connect Laravel app to database which is hosted on Azzure over ssl无法通过 ssl 将 Laravel 应用程序连接到托管在 Azzure 上的数据库
【发布时间】:2020-04-11 20:25:27
【问题描述】:

我正在努力将 Laravel 应用程序与 MYSQL 数据库连接起来。我可以通过 MySQL Workbench 和 PDO 连接自定义字符串连接到数据库,但使用 Laravel 我不能。不知道出了什么问题。

自定义连接字符串:它的工作文件在 laravel 应用程序内。我把这个只是为了检查

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "BaltimoreCyberTrustRoot.crt.pem", NULL, NULL) ; 
mysqli_real_connect($conn, 'sever.host', 'server-username', 'server-password', 'database', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
else{
    echo "Connected";
}

然后我在 .env 文件中添加了以下内容,除了定义用户名密码主机和数据库名称。 BaltimoreCyber​​TrustRoot.crt.pem 文件与 .env 文件位于同一路径

MYSQL_SSL_KEY=BaltimoreCyberTrustRoot.crt.pem
MYSQL_SSL_CERT=BaltimoreCyberTrustRoot.crt.pem
MYSQL_SSL_CA=BaltimoreCyberTrustRoot.crt.pem
MYSQL_SSL_CIPHER=BaltimoreCyberTrustRoot.crt.pem

MYSQL_SSL=true

在 config/database.php 中是这样的

 '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,
            'options' => (env('MYSQL_SSL')) ? [
            PDO::MYSQL_ATTR_SSL_KEY    => env('MYSQL_SSL_KEY'),  // /path/to/key.pem
            PDO::MYSQL_ATTR_SSL_CERT   => env('MYSQL_SSL_CERT'), // /path/to/cert.pem
            PDO::MYSQL_ATTR_SSL_CA     => env('MYSQL_SSL_CA'),   // /path/to/ca.pem
            PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER')
        ] : [],

不知道哪里出了问题,有什么想法吗?

我收到以下错误:

"error":"SQLSTATE[HY000] [2002] 试图以访问权限禁止的方式访问套接字。 [{"file":"D:\home\site\wwwroot\vendor\laravel\framework\src\Illuminate\Database\Connection.php","line":624,"function":"runQueryCallback","class" :"Illuminate\Database\Connection","type":"->","args":["select * from backend_token limit 1",[],{}]},

【问题讨论】:

  • 嗯,会发生什么?你有错误吗?
  • @ceejayoz 我用错误更新了问题。
  • 这有助于提及您使用的是哪个版本的 Laravel。原始 config/database.php 文件中有什么内容?

标签: php laravel


【解决方案1】:

绝对确定您使用的是哪个版本的 Laravel 会有所帮助,但在 Laravel 8 上,我的数据库配置有:

'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        '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' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

不要更改您的 database.php 配置,而是在您的 .env 中添加 MYSQL_ATTR_SSL_CA=/path/to/BaltimoreCyberTrustRoot.crt.pem

仅供参考,有时如果您使用私有 IP 地址,请编辑您的主机文件

10.10.10.10 hostname.domain.com

当然,ip 号与主机的 ip 匹配。

如果这不起作用,请从您的配置中添加密码行 PDO::MYSQL_ATTR_SSL_CIPHER => env('MYSQL_SSL_CIPHER'),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2012-07-06
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2022-06-15
    相关资源
    最近更新 更多