2017-05-19 231 views
0

私はインターネット上で検索してきましたが、何の成功も見せていません。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

私は私のlaravelアプリケーションからSSL経由で紺碧のMySQLデータベースに接続しようとしています。

sslをオフにするとデータベースに接続できることを確認しました。そのため、設定は正しいです。何が私を動かすのか、そして何も私が見つけることができるものは、SSLを介して接続する方法です。私はsslkeyを持っている - 私は私のデータベース管理プログラムの1つでデータベースに接続するために使用することができることを確認した - その部分はそこにあります。

しかし、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]だから近いです。

答えて

1

ファイルの絶対パスを指定する必要があります。彼らがあなたの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ノートは問題を解決しませんが、役立ちます。マイクロソフトのすべての紺碧のドキュメントは、紺碧に接続するための1つの.pemファイルのみを指定しています。しかし、他のものを生成し、あなたのソリューションが動作するかどうかを調べるでしょう。 – Mugluck

0

です。問題を解決しました。 「あなたが使用する必要がある場合、」

:Microsoftとの電話で飛び乗って、ログエラーのいずれかが気づいた:

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をホワイトリストに登録してください)。

関連する問題