Install and Configure MariaDB SSL on Ubuntu VPS: Complete Guide

By Raman Kumar

Share:

Updated on May 15, 2026

Install and Configure MariaDB SSL on Ubuntu VPS: Complete Guide

Why MariaDB SSL Configuration Matters for VPS Hosting

Database connections transmit sensitive data across networks. Without SSL encryption, this traffic travels in plain text. Passwords, customer information, and business data become vulnerable to network sniffing attacks.

SSL encryption protects these connections using industry-standard TLS protocols. Your database traffic gets encrypted end-to-end. This works whether you're connecting locally or from remote applications.

This guide walks you through installing and configuring MariaDB SSL on Ubuntu VPS step-by-step. You'll generate certificates, update configuration files, and verify secure connections.

Prerequisites and System Requirements

Before starting, ensure your system meets these requirements:

  • Ubuntu 20.04 LTS or Ubuntu 22.04 LTS VPS
  • Root or sudo access to the server
  • MariaDB 10.3 or newer installed
  • At least 512MB RAM available
  • Basic familiarity with command line operations

Check your current MariaDB version:

mysql --version

If MariaDB isn't installed yet, install it first:

sudo apt update
sudo apt install mariadb-server mariadb-client

Install MariaDB and Initial Setup

Start with a fresh MariaDB installation and secure it properly. Run the security script to remove default accounts and set up proper authentication:

sudo mysql_secure_installation

Answer the prompts to set a root password, remove anonymous users, and disable remote root login. These steps establish baseline security before adding SSL.

Verify MariaDB is running correctly:

sudo systemctl status mariadb

The service should show "active (running)" status. If it's not running, start it:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Generate SSL Certificates for MariaDB

MariaDB requires three certificate files: a Certificate Authority (CA) certificate, a server certificate, and a server private key.

Create a directory for SSL certificates:

sudo mkdir -p /etc/mysql/ssl
cd /etc/mysql/ssl

Generate the CA private key:

sudo openssl genrsa 2048 > ca-key.pem

Create the CA certificate:

sudo openssl req -new -x509 -nodes -days 365 -key ca-key.pem -out ca-cert.pem

When prompted for certificate details, enter your server information. The Common Name should match your server's hostname or IP address.

Generate the server private key:

sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout server-key.pem -out server-req.pem

Process the server certificate signing request:

sudo openssl rsa -in server-key.pem -out server-key.pem
sudo openssl x509 -req -in server-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Set proper ownership and permissions:

sudo chown mysql:mysql /etc/mysql/ssl/*
sudo chmod 600 /etc/mysql/ssl/*-key.pem
sudo chmod 644 /etc/mysql/ssl/*-cert.pem

Configure MariaDB for SSL Connections

Edit the main configuration file to enable SSL support. Open the configuration file:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Add these SSL configuration lines under the [mysqld] section:

ssl-ca=/etc/mysql/ssl/ca-cert.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
ssl-cipher=HIGH:!aNULL:!MD5
require_secure_transport=ON

The require_secure_transport setting forces all connections to use SSL. Remove this line if you need to support both encrypted and unencrypted connections during migration.

Restart MariaDB to apply the configuration:

sudo systemctl restart mariadb

Check that MariaDB started successfully:

sudo systemctl status mariadb

If the service fails to start, check the error log:

sudo tail -f /var/log/mysql/error.log

Create SSL-Enabled Database Users

Connect to MariaDB and create users that require SSL connections. Log in as root:

sudo mysql -u root -p

Create a database user that requires SSL:

CREATE USER 'ssluser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'localhost' REQUIRE SSL;
FLUSH PRIVILEGES;

For remote connections, specify the client IP or use wildcards:

CREATE USER 'ssluser'@'%' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'ssluser'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;

You can also create users that require specific certificate validation:

CREATE USER 'certuser'@'%' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'certuser'@'%' REQUIRE X509;
FLUSH PRIVILEGES;

Test MariaDB SSL Configuration

Verify SSL is working by checking the connection status. Connect using the SSL-enabled user:

mysql -u ssluser -p --ssl-ca=/etc/mysql/ssl/ca-cert.pem

Once connected, check the SSL status:

SHOW STATUS LIKE 'Ssl_%';

Look for these key indicators of a successful SSL connection:

  • Ssl_cipher should show an encryption algorithm
  • Ssl_version should display TLS version (e.g., TLSv1.3)
  • Ssl_accepts should be greater than 0

Test the connection from a remote client if applicable. Copy the CA certificate to your client machine and connect:

mysql -h your_server_ip -u ssluser -p --ssl-ca=ca-cert.pem

Applications connecting to your Hostperl VPS database will now use encrypted connections. This protects sensitive data during transmission.

Configure Client Certificates for Enhanced Security

For maximum security, configure client certificates. These provide mutual authentication between the server and connecting applications.

Generate a client private key:

cd /etc/mysql/ssl
sudo openssl req -newkey rsa:2048 -days 365 -nodes -keyout client-key.pem -out client-req.pem

Sign the client certificate with your CA:

sudo openssl rsa -in client-key.pem -out client-key.pem
sudo openssl x509 -req -in client-req.pem -days 365 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem

Create a database user that requires client certificates:

mysql -u root -p
CREATE USER 'clientcert'@'%' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'clientcert'@'%' REQUIRE X509;
FLUSH PRIVILEGES;

Test the client certificate connection:

mysql -u clientcert -p --ssl-ca=/etc/mysql/ssl/ca-cert.pem --ssl-cert=/etc/mysql/ssl/client-cert.pem --ssl-key=/etc/mysql/ssl/client-key.pem

Troubleshooting Common SSL Issues

SSL configuration problems typically show up as connection errors or certificate validation failures. Here's how to diagnose and fix common issues:

Connection refused errors: Check that MariaDB is listening on the correct port and accepting connections:

sudo netstat -tlnp | grep mysql
sudo ufw status

Ensure port 3306 is open if connecting remotely.

Certificate permission errors: Verify file ownership and permissions:

ls -la /etc/mysql/ssl/

The mysql user must own all certificate files with appropriate read permissions.

SSL handshake failures: Check certificate validity and matching:

sudo openssl x509 -in /etc/mysql/ssl/server-cert.pem -text -noout

Verify the certificate hasn't expired. The Common Name must match your server configuration.

Review MariaDB error logs for specific SSL-related messages:

sudo tail -100 /var/log/mysql/error.log | grep -i ssl

Performance Considerations for MariaDB SSL

SSL encryption adds computational overhead to database connections. On modern VPS hardware, this impact is typically minimal but worth monitoring.

Monitor CPU usage during peak database activity:

top -p $(pgrep mysqld)

If SSL overhead becomes significant, consider these optimizations:

  • Use connection pooling to reduce SSL handshake frequency
  • Choose efficient cipher suites in your SSL configuration
  • Implement connection keep-alive in your applications

For high-traffic applications on managed VPS hosting, benchmark your specific workload. This helps you quantify the performance impact.

Ready to deploy a secure MariaDB setup? Hostperl VPS hosting provides the resources and flexibility you need for production database deployments. Our New Zealand-based support team helps with server configurations, SSL implementations, and performance optimization.

Frequently Asked Questions

Does SSL encryption affect database performance significantly?

SSL encryption adds approximately 1-5% CPU overhead for typical workloads. The security benefits outweigh this minimal performance impact in production environments.

Can I use existing SSL certificates from my web server for MariaDB?

Yes, you can reuse certificates if they're properly formatted and accessible to the mysql user. Ensure certificate permissions and ownership are correctly configured.

What happens if SSL certificates expire while MariaDB is running?

New connections will fail once certificates expire, but existing connections remain active. Monitor certificate expiration dates and renew before they expire to avoid service disruption.

How do I disable SSL temporarily for troubleshooting?

Comment out the SSL configuration lines in 50-server.cnf and restart MariaDB. Remove the require_secure_transport setting to allow unencrypted connections during debugging.

Can I use Let's Encrypt certificates for MariaDB SSL?

Yes, Let's Encrypt certificates work with MariaDB. Copy the certificate files to the SSL directory and update file permissions for the mysql user.