1

尝试通过 SSL 连接到 Azure MariaDB 数据库时收到 PDO 异常。

问题源于对等证书与我连接的主机名不匹配。

我已经尽可能地研究了这个问题。以下链接符合我的问题:

https://github.com/MicrosoftDocs/azure-docs/issues/24210#issuecomment-465256195 https://stackoverflow.com/a/44065629

如果我将主机名更改为 ,我可以连接cr1.ukwest1-a.control.database.windows.net,但这不是可接受的解决方法。禁用 SSL 不是一种选择,也不是禁用对等验证。

Lumen 数据库连接选项。

    'connections' => [
        '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' => array_filter([
                PDO::MYSQL_ATTR_SSL_CA => storage_path('BaltimoreCyberTrustRoot.crt.pem')
            ]),
        ],
    ],

Lumen 报告的 PDO 异常。

PDO::__construct(): Peer certificate CN=`cr1.ukwest1-a.control.database.windows.net' did not match expected CN=`jay-mariadb-staging.mariadb.database.azure.com'

编辑

我尝试使用 PDO 手动连接,而不是依赖 Lumens 类。这会导致相同的错误消息。

$options = array(
    PDO::MYSQL_ATTR_SSL_CA => storage_path('BaltimoreCyberTrustRoot.crt.pem')
);
$db = new PDO('mysql:host=jay-mariadb-staging.mariadb.database.azure.com;port=3306;dbname=azure', username@jay-mariadb-staging', password, $options);
4

0 回答 0