Components
- MySQL image: MySQL container configured with
--require_secure_transport=ONfor client authentication. - Dynamic certificate generation via OpenSSL:
- certgen.sh script: Generates a custom CA, server, and client certificates using OpenSSL.
- minidebug image: A Minimus dev toolkit that provides a shell, OpenSSL, and other utilities used to generate the certificates.
What this guide demonstrates
- TLS handshake validation
- Server/client certificate trust
- Basic auth and MySQL operations
- Image compatibility
Directory Structure
Deploy MySQL with TLS certificates
1
Save certgen.sh
Save the following script to a file named
certgen.sh. The script is used to generate the TLS certificates and store them in a certs folder on the host. It sets UID 1000 as the owner of the certificate files to match the default user of the MariaDB process inside the container.certgen.sh
2
Save create-certs.yml
Save the following YAML file to run with Docker Compose. It uses the Minimus minidebug image to generate the certificates with the
certgen.shshell script. Minidebug is a Minimus dev toolkit that provides a shell, OpenSSL, and other utilities.The certificates will be persisted in the certs volume on the host.create-certs.yml
3
Generate certificates
Run the following to generate the certificates:
TLS certificates
The scriptcertgen.sh generates the following self-signed certificates:- Self-signed CA certificate (
ca.pem) - Server certificates (
server-cert.pem,server-key.pem,server.csr) - Client certificates for
testuser(client.csr,client.pem,client-cert.pem,client-key.pem)
4
Save Docker Compose script
Save the following Docker Compose script to a file named
docker-compose.yml. This script sets up the MySQL service with a healthcheck, mounts a volume with the certificates, maps port 3306, and connects the container to a custom network:docker-compose.yml
5
Run MySQL
Start the MySQL container:
6
Run tests
Following are a few commands you can try out:
-
Connect to the database:
You should get a response from the server asking to input the password. If you used the compose file from this guide as is, the password is
rootpass. -
Create a test database (for example
my_new_db): -
List all databases:
-
Show server version:
-
Check that TLS is active:
Some server options and system variables were recently deprecated, including
--ssl,--skip-ssl, and--admin-sslserver options, and thehave_sslandhave_opensslsystem variables. Learn more