- π Contents
- π― Audience
- π Security objectives
- π Repository structure
- π οΈ Supported databases
- βοΈ Installation & usage
- π TLS configuration
β οΈ Disclaimer
This repository provides secure configurations for multiple database systems.
It also includes scripts to initialize the databases and notes on hardening tools.
Database deployments are provided for:
- π§ Linux with Docker Compose β containerized, automated setups
- πͺ Windows without Docker β local, manual installs (e.g., development environments)
This repository is aimed at:
- IT administrators
- Database administrators
- Developers focused on secure database operations
Goal: reproducible, secure database setups covering these aspects:
- Enforce encrypted communication (TLS/SSL)
- Restrict access to trusted networks or hosts
- Enable meaningful logs to trace activity
- Log failed or suspicious access attempts
- Define secure locations for database files
- Use restrictive permissions on data and log directories
- Automated, regular, encrypted backups
- Verify restorability (restore tests)
- Use role-based access control (RBAC)
- Minimal privileges following the least-privilege principle
The following must be done continuously in operations:
- Apply security updates regularly
- Monitor database logs for security incidents
DBMS folders generally follow this structure:
DatabaseSystem/ # DBMS name
βββ Version_X/ # Version number
βββ Linux/ # Docker Compose setup (container, .env, volumes, init scripts)
β βββ compose/ # Docker Compose configuration
| | βββ init_db/ # Collection of scripts to initialize the DBMS
| | βββ .env.default # Template for environment variables (e.g., username, port, password)
| | βββ docker-compose.yml # Docker Compose file
β βββ config_description-linux.md # Description of security-relevant settings and their purpose
| βββ *configuration file* # DBMS-specific configuration file
βββ Windows/ # Classic configuration for local Windows installation
βββ init_scripts/ # Scripts for database initialization
βββ config_description-windows.md # Description of security-relevant settings and their purpose
βββ *configuration file* # DBMS-specific configuration fileβ
MariaDB
β
MongoDB
β
MySQL
β
Weaviate
β
Redis
Coming soon:
β‘οΈ Neo4j β‘οΈ PostgreSQL
- Choose a configuration file from
configs/. - Adjust it to your environment and security requirements.
- Apply the configuration to your database.
- Test connectivity, authentication, and backups.
This guide shows how to create your own Certificate Authority (CA) with OpenSSL on Windows and issue server and client certificates for applications such as MongoDB. The X.509 extensions are defined explicitly so that the resulting certificates remain reviewable and reproducible instead of depending on local OpenSSL defaults.
- Installed OpenSSL for Windows
- Write access to the certificate directory (e.g.,
C:\data) - Replace the example DNS names and IP addresses with values matching the target environment
Important
Private keys must be protected with restrictive file permissions. The CA private key is encrypted with AES-256 in this example. Server and client private keys remain unencrypted for unattended service use and therefore require appropriate filesystem protection.
# Generate an encrypted CA private key
openssl genrsa -aes256 -out test-ca.key 4096
# Create the CA certificate with explicit CA extensions
openssl req -x509 -new -key test-ca.key -sha256 -days 365 -out test-ca.pem -subj "/CN=MongoDB Test CA" -addext "basicConstraints=critical,CA:TRUE" -addext "keyUsage=critical,keyCertSign,cRLSign"Result:
test-ca.keyβ AES-256-encrypted CA private keytest-ca.pemβ self-signed CA certificate with explicit CA properties
# Generate server key
openssl genrsa -out mongo-server1.key 4096
# Create Certificate Signing Request (CSR)
openssl req -new -key mongo-server1.key -out mongo-server1.csr -subj "/CN=mongo-server1"
# Define explicit X.509 extensions for the server certificate
@"
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=DNS:mongo-server1,DNS:localhost,IP:127.0.0.1
"@ | Set-Content -Encoding ascii server-ext.cnf
# Sign CSR with the CA and the explicit server extensions
openssl x509 -req -in mongo-server1.csr -CA test-ca.pem -CAkey test-ca.key -CAcreateserial -out mongo-server1.crt -days 365 -sha256 -extfile server-ext.cnf
# Combine key + certificate for MongoDB
cmd /c copy /b mongo-server1.key+mongo-server1.crt mongo-server1.pemNote
The subjectAltName values must match the DNS names or IP addresses clients actually use to reach the MongoDB server. Certificate identity verification uses these values for hostname validation.
Result:
mongo-server1.pemβ server certificate including the private key and certificateserver-ext.cnfβ explicit X.509 extensions for the server certificate
# Generate client key
openssl genrsa -out mongo-client.key 4096
# Create Certificate Signing Request (CSR)
openssl req -new -key mongo-client.key -out mongo-client.csr -subj "/CN=mongo-client"
# Define explicit X.509 extensions for the client certificate
@"
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=clientAuth
"@ | Set-Content -Encoding ascii client-ext.cnf
# Sign CSR with the CA and the explicit client extensions
openssl x509 -req -in mongo-client.csr -CA test-ca.pem -CAkey test-ca.key -CAcreateserial -out mongo-client.crt -days 365 -sha256 -extfile client-ext.cnf
# Combine key + certificate for the client
cmd /c copy /b mongo-client.key+mongo-client.crt mongo-client.pemResult:
mongo-client.pemβ client certificate including the private key and certificateclient-ext.cnfβ explicit X.509 extensions for the client certificate
The generated certificates and their extensions should be reviewed before use:
openssl x509 -in test-ca.pem -noout -text
openssl x509 -in mongo-server1.crt -noout -text
openssl x509 -in mongo-client.crt -noout -textThe server certificate should show CA:FALSE, TLS Web Server Authentication, and the expected Subject Alternative Names. The client certificate should show TLS Web Client Authentication.
net:
port: 27017
bindIp: 0.0.0.0
tls:
mode: requireTLS
certificateKeyFile: C:\data\mongo-server1.pem
CAFile: C:\data\test-ca.pem- Encrypted CA key and CA certificate created (
test-ca.key,test-ca.pem) - Server certificate created with explicit SAN and
serverAuth(mongo-server1.pem) - Client certificate created with explicit
clientAuth(mongo-client.pem) - X.509 extensions can be reviewed before use
- MongoDB TLS enabled via
mongod.conf
These files serve as general security guides.
Before using them in production, review them carefully and adapt them to your internal requirements.
Β© 2025 β Secure database configurations