diff --git a/.env.example b/.env.example index 98d7bbc963..f3536bedeb 100644 --- a/.env.example +++ b/.env.example @@ -65,6 +65,16 @@ DB_DATABASE=firefly DB_USERNAME=firefly DB_PASSWORD=secret_firefly_password +# MySQL supports SSL. You can configure it here. +# If you use Docker or similar, you can set these variables from a file by appending them with _FILE +MYSQL_SSL_MODE=prefer +MYSQL_SSL_ROOT_CERT_PATH= +MYSQL_SSL_ROOT_CERT= +MYSQL_SSL_CERT= +MYSQL_SSL_KEY= +MYSQL_SSL_CIPHER= +MYSQL_SSL_VERIFY= + # PostgreSQL supports SSL. You can configure it here. # If you use Docker or similar, you can set these variables from a file by appending them with _FILE PGSQL_SSL_MODE=prefer diff --git a/config/database.php b/config/database.php index 3ec1f3e55b..425a28962d 100644 --- a/config/database.php +++ b/config/database.php @@ -39,6 +39,24 @@ if (!(false === $databaseUrl)) { $database = substr($options['path'] ?? '/firefly', 1); } +/* + * Get SSL parameters from .env file. + */ +$mysql_ssl_ca_dir = envNonEmpty('MYSQL_SSL_ROOT_CERT_PATH', null); +$mysql_ssl_ca_file = envNonEmpty('MYSQL_SSL_ROOT_CERT', null); +$mysql_ssl_cert = envNonEmpty('MYSQL_SSL_CERT', null); +$mysql_ssl_key = envNonEmpty('MYSQL_SSL_KEY', null); +$mysql_ssl_ciphers = envNonEmpty('MYSQL_SSL_CIPHER', null); +$mysql_ssl_verify = envNonEmpty('MYSQL_SSL_VERIFY', null); + +$mysql_ssl_options = []; +if ($mysql_ssl_ca_dir !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_CAPATH ] = $mysql_ssl_ca_dir; +if ($mysql_ssl_ca_file !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_CA ] = $mysql_ssl_ca_file; +if ($mysql_ssl_cert !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_CERT ] = $mysql_ssl_cert; +if ($mysql_ssl_key !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_KEY ] = $mysql_ssl_key; +if ($mysql_ssl_ciphers !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_CIPHER ] = $mysql_ssl_ciphers; +if ($mysql_ssl_verify !== null) $mysql_ssl_options[PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT] = $mysql_ssl_verify; + return [ 'default' => envNonEmpty('DB_CONNECTION', 'pgsql'), 'connections' => [ @@ -60,6 +78,8 @@ return [ 'prefix' => '', 'strict' => true, 'engine' => 'InnoDB', + 'sslmode' => envNonEmpty('MYSQL_SSL_MODE', 'prefer'), + 'options' => $mysql_ssl_options, ], 'pgsql' => [ 'driver' => 'pgsql',