如何使用Laravel 5.3通过SSL连接到MySQL数据库

问题描述:

我一直在搜索整个互联网,并没有取得任何成功。如何使用Laravel 5.3通过SSL连接到MySQL数据库

如:https://laravel.io/forum/06-18-2014-connecting-mysql-over-ssl?page=1 https://laracasts.com/discuss/channels/lumen/connecting-to-mysql-via-ssl-from-lumen

我试图通过SSL从我laravel应用程序连接到蔚蓝色的MySQL数据库。

我确认我可以连接到数据库,如果我打开ssl。所以设置是正确的。什么让我起来,我能找到什么没有文档是如何通过SSL连接。我有一个sslkey - 我已经确认可以用它来连接到我的数据库管理程序之一的数据库 - 所以这些部分就在那里。

然而,Laravel似乎失败了。

这里是我的数据库驱动程序:

'mysql' => [ 
      'driver' => 'mysql', 
      'host' => env('DB_HOST', 'localhost'), 
      'port' => env('DB_PORT', '3306'), 
      'database' => env('DB_DATABASE', 'forge'), 
      'username' => env('DB_USERNAME', 'forge'), 
      'password' => env('DB_PASSWORD', ''), 
      'charset' => 'utf8', 
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
      'engine' => null, 
      'sslmode' => env('DB_SSLMODE', 'prefer'), 
      'options' => array(
          PDO::MYSQL_ATTR_SSL_KEY => '\ssl\DatabaseCACert.pem'), 
     ], 

我缺少什么?数据库目前只是拒绝连接。 SQLSTATE[HY000] [2002]所以它很接近。

您需要提供文件的完整路径。如果他们在您的laravel应用程序文件夹中,那么您可以使用base_path方法生成完整的版本。您可能还需要定义证书和CA.

'options' => [ 
    PDO::MYSQL_ATTR_SSL_KEY => base_path('ssl/client-key.pem'), 
    PDO::MYSQL_ATTR_SSL_CERT => base_path('ssl/client-cert.pem'), 
    PDO::MYSQL_ATTR_SSL_CA => base_path('ssl/ca-cert.pem') 
] 
+0

base_path备注有帮助,但它不能解决问题。所有的Microsoft Azure文档都只指定了一个用于连接到azure的.pem文件。但会尝试生成其他人并查看您的解决方案是否有效。 – Mugluck

好的。解决了这个问题。跳上与微软在手机上,发现日志的错误之一是:

PDO::__construct(): Peer certificate CN=`resourceregion-a.control.database.windows.net' did not match expected CN=`db.mysql.database.azure.com' 

这@alexejenko指出文档中该行后,该位:

“如果你需要使用” --ssl-mode = VERIFY_IDENTITY“,那么你可以ping你的服务器名称来解析区域服务器名称,比如westeurope1-a.control.database.windows.net,并在连接中使用该区域服务器名称,直到此问题出现我们计划在未来取消这一限制。“

原来这是发生了什么事。数据库连接路由到区域数据库,而不是我的。所以你不完成的产品。

将我的DB_HOST更改为该区域后,它已成功连接(请注意:确保您已将您的ips列入白名单)。