Update: Microsoft Azure Database for MySQL: Use PHP (not) to Connect and Query Data article has now some new updates.
Microsoft listened to my words, so I have found a documentation how to connect to Azure Database for MySQL with PHP via SSL connection. This can be found here:
https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl
Of course this is not a complete solution because it did not work for me. So here is my solution.
- Follow the steps of the documentation mentioned above.
- Modify config.php by adding dbssl and dbcertificate options to the dboptions array :
$CFG->dboptions = array ( 'dbpersist' => 0, 'dbport' => '', 'dbsocket' => '', 'dbcollation' => 'utf8_general_ci', 'dbssl' => true, 'dbcertificate' => '/path/to/cert/BaltimoreCyberTrustRoot.crt.pem', //modify path );
- Modify /path/to/moodle/lib/dml/mysqli_native_moodle_database.php by changing the following code in the function connect().
if ($dbhost and !empty($this->dboptions['dbpersist'])) { $dbhost = "p:$dbhost"; } $ssl = false; if (empty($this->dboptions['dbssl'])) { $ssl = false; } else { $ssl = (bool)$this->dboptions['dbssl']; if (!empty($this->dboptions['dbcertificate'])) { $dbcertificate = (string)$this->dboptions['dbcertificate']; } } if ($ssl){ $this->mysqli = mysqli_init(); $this->mysqli->ssl_set(NULL,NULL, $dbcertificate, NULL, NULL) ; $this->mysqli->real_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport, NULL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT); } else { $this->mysqli = @new mysqli($dbhost, $dbuser, $dbpass, $dbname, $dbport, $dbsocket); }
The magic here is that for the function real_connect() you have to add MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT attribute to the end.
Then test your connection.
Cheers.