尝试通过 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);