问下laravel如何用ca.pem证书连接mysql数据库

AI摘要
用户分享了一个PHP 7.4环境下,使用PDO和CA证书成功连接MySQL 8.4.7数据库的独立脚本示例,但遇到在Laravel 8.83框架中配置相同SSL参数时出现“2002”连接错误的问题。这是一个关于在特定框架内配置数据库SSL连接的技术问题提问。

情况是这样的,我的php是7.4,然后mysql8.4.7,laravel 8.83.然后客户给了一个ca证书,然后我这样是能获取数据库里面数据的:
我创建一个文件如test.php:

<?php
$host = '10.236.82.98';
$port = 33062;
$dbname = 'fss';
$username = 'FOOD_SAFETY_DB_T';
$password = 'B4t^wE6yH1pZ8oF&';
$ssl_ca = '/home/www/food/backend/ca.pem';

$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=utf8mb4";

$options = [
    PDO::MYSQL_ATTR_SSL_CA => $ssl_ca,
    PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];

try {
    $pdo = new PDO($dsn, $username, $password, $options);
    echo "连接成功!\n";
    // 检查SSL状态
    $stmt = $pdo->query("SHOW STATUS LIKE 'Ssl_cipher'");
    $result = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!empty($result['Value'])) {
        echo "sslsuccess " . $result['Value'] . "\n";
    } else {
        echo "weishissl。\n";
    }
    $sql = "select * from demo where id= 1";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($data) {
        foreach($data as $key=>$value) {
            echo $key .":".$value."\n";
        }
    } else {
        echo 'weichadao';
    }
} catch (PDOException $e) {
    echo "shibai: " . $e->getMessage() . "\n";
}

然后这样php test.php 就能连接成功,并且查询到数据:

问下laravel如何用ca.pem证书连接mysql数据库
然后我用laravel,就报2002错误:

问下laravel如何用ca.pem证书连接mysql数据库
我配置了这样的:

问下laravel如何用ca.pem证书连接mysql数据库

问下laravel如何用ca.pem证书连接mysql数据库

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 2
yangweijie

'options' => extension_loaded('pdo_mysql') ? array_filter([ (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'), ]) : [],

3天前 评论
// ssl 配置
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    // ... 其他配置项
    'options' => [
        PDO::MYSQL_ATTR_SSL_CA => base_path('ssl/ca.pem'),
        PDO::MYSQL_ATTR_SSL_CERT => base_path('ssl/client-cert.pem'),
        PDO::MYSQL_ATTR_SSL_KEY => base_path('ssl/client-key.pem'),
        // 如果服务器证书验证有问题,可以临时关闭验证
        // PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
    ],
],
3天前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!