前提・実現したいこと
Azure App Serviceに配置したPHPから、Azure Database for MySQLにアクセスするサーバアプリを作成しています。
PHP、Azure共に初心者です。
発生している問題・エラーメッセージ
SSL接続を求められたので、下記サイトを確認して進めていました。
Azure Database for MySQL に安全に接続するためにアプリケーションで SSL 接続を構成する
What's the difference between MYSQLI_CLIENT_SSL and MYSQLI_OPT_SSL_VERIFY_SERVER_CERT?
以下のエラーが表示され、回避策がわかりません。
- MYSQLI_OPT_SSL_VERIFY_SERVER_CERTのオプション設定を実装していると、ここでエラーになります。
- また、上記のオプション設定の実装を外すと、MySQL接続時にエラーになります。
該当のソースコード
PHP
1 // 初期化処理 2 $mysqli = mysqli_init(); 3 if (!$mysqli) { 4 die("mysqli_init failed"); 5 } 6 7 // オプション設定 8 if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) { 9 die('Setting MYSQLI_OPT_CONNECT_TIMEOUT failed'); 10 } 11 if (!$mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true)) { 12 // ★このエラーが表示される 13 die('Setting MYSQLI_OPT_SSL_VERIFY_SERVER_CERT failed'); 14 } 15 16 // SSL設定 17 $mysqli->ssl_set(NULL, NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL); 18 19 // MySQLへ接続する 20 $mysqli->real_connect($url, $user, $pass, $db, 3306, NULL, MYSQLI_CLIENT_SSL); 21 if ($mysqli->connect_errno) { 22 // ★MYSQLI_OPT_SSL_VERIFY_SERVER_CERTのオプション設定を外すとこのエラーが表示される 23 die("real_connect failed: " . $mysqli->connect_error); 24 }
試したこと
- BaltimoreCyberTrustRoot.crt.pemをダウンロードして、MySQL Workbenchからバインド
- real_connectのエラーメッセージ、エラー番号は空でした
- 動作確認は下記サイトで行っており、MySQL関連の処理までは正しく動いていることは確認済です
補足情報(FW/ツールのバージョンなど)
PHP 7.3
MySQL 8.0
/var/www/html/BaltimoreCyberTrustRoot.crt.pem
上記パスについてもよくわかっておらず、どこかにファイルを格納する必要があるのでしょうか?
セキュリティに関してあまり詳しくないですが、
SSL設定をOFFにするのはセキュリティ上よろしくないと思うので、それは極力避けたいと思っています。
なにか情報をお持ちの方がいましたら、ご回答よろしくお願いします。
編集途中で投稿していたようなので、情報を追記しました。
【追記 2019/09/20】
Azure DatabaseのConnection Securityを確認しました。
- Allow access to Azure services → OFF
- ルール → Start IP Address(0.0.0.0)、End IP Address(255.255.255.255)
※ローカルのMySQL Workbenchから参照できるようにするために設定しています。
- Enforce SSL connection → Enabled
回答1件
あなたの回答
tips
プレビュー