Я получаю исключение PDO при попытке подключиться к базе данных Azure MariaDB через SSL.
Проблема связана с тем, что сертификат однорангового узла не соответствует имени хоста, к которому я подключаюсь.
Я исследовал проблему в максимально возможной степени. Следующие ссылки соответствуют моей проблеме:
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')
]),
],
],
Исключение PDO, сообщенное Lumen.
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);