Přeskočit obsah

Konfigurace TLS

Nastavení TLS certifikátů pro nasazení MazeVault

Verze dokumentu: 1.0.0
Poslední aktualizace: 2026-02-10


1. Požadavky na certifikáty

Certifikát Účel Formát Minimální velikost klíče
Server TLS HTTPS pro webové rozhraní + API PEM RSA 2048 / ECDSA P-256
OCSP TLS HTTPS pro OCSP Responder (volitelné) PEM RSA 2048 / ECDSA P-256
Database SSL Šifrování připojení k PostgreSQL PEM RSA 2048
Agent mTLS CA CA pro klientské certifikáty agentů PEM RSA 2048

2. Možnosti certifikátů

Možnost A: Interní CA MazeVault

Použijte vestavěnou certifikační autoritu MazeVault k vydání serverových certifikátů pro interní nasazení:

  1. Vytvořte kořenovou CA v MazeVault (Nastavení → Certifikační autority → Vytvořit CA)
  2. Vydejte serverový certifikát pro vaši doménu
  3. Distribuujte certifikát kořenové CA všem klientům jako důvěryhodnou CA

Možnost B: Let's Encrypt (veřejný internet)

Pro nasazení přístupná z internetu použijte Let's Encrypt s cert-manager (Kubernetes) nebo certbot (on-premise):

Kubernetes (cert-manager):

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: mazevault-tls
  namespace: mazevault
spec:
  secretName: mazevault-tls
  issuerRef:
    name: letsencrypt-prod
    kind: ClusterIssuer
  dnsNames:
    - vault.example.com

On-premise (certbot):

sudo certbot certonly --nginx -d vault.example.com
# Certificates stored in /etc/letsencrypt/live/vault.example.com/

Možnost C: Enterprise CA (interní PKI)

Využijte stávající PKI infrastrukturu vaší organizace k vydání certifikátů:

  1. Vygenerujte CSR na serveru MazeVault
  2. Odešlete jej vaší enterprise CA (Microsoft ADCS, Venafi atd.)
  3. Nainstalujte vydaný certifikát a řetězec CA

3. Konfigurace TLS — On-premise

Umístění souborů certifikátů

/opt/mazevault/certs/
├── server.crt          # Server certificate + intermediate CA chain
├── server.key          # Private key (chmod 600)
└── ca.crt              # Root CA certificate (for verification)

Oprávnění souborů

chmod 644 /opt/mazevault/certs/server.crt
chmod 600 /opt/mazevault/certs/server.key
chmod 644 /opt/mazevault/certs/ca.crt
chown root:root /opt/mazevault/certs/*

Nastavení TLS v Nginx

Doporučená konfigurace TLS pro on-premise nasazení:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

4. Konfigurace TLS — Kubernetes

TLS Secret

kubectl create secret tls mazevault-tls \
  --namespace mazevault \
  --cert=server.crt \
  --key=server.key

Ingress TLS

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: mazevault-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  tls:
    - hosts:
        - vault.example.com
      secretName: mazevault-tls

5. SSL databáze

Konfigurace SSL pro PostgreSQL

Pro samostatný PostgreSQL:

# postgresql.conf
ssl = on
ssl_cert_file = '/var/lib/postgresql/certs/server.crt'
ssl_key_file = '/var/lib/postgresql/certs/server.key'
ssl_ca_file = '/var/lib/postgresql/certs/ca.crt'
ssl_min_protocol_version = 'TLSv1.2'

Pro Azure Database for PostgreSQL Flexible Server je SSL vynuceno ve výchozím nastavení.

Připojovací řetězec

postgresql://user:password@host:5432/mazevault?sslmode=verify-full&sslrootcert=/path/to/ca.crt
SSL režim Popis Doporučeno
disable Bez SSL
require SSL vyžadováno, bez ověření CA ⚠️ Pouze pro vývoj
verify-ca SSL + ověření certifikátu CA
verify-full SSL + CA + ověření názvu hostitele ✅ Produkce

6. Obnova certifikátů

Monitorování expirace

MazeVault sleduje expiraci TLS certifikátů a generuje upozornění:

Práh Úroveň upozornění
30 dní před expirací Varování
7 dní před expirací Kritické

Postupy obnovy

Let's Encrypt (automatická obnova):

# Certbot auto-renewal (cron)
0 0 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

Ruční obnova: 1. Získejte nový certifikát od vaší CA 2. Nahraďte soubory v /opt/mazevault/certs/ 3. Znovu načtěte Nginx: docker compose exec nginx nginx -s reload

Kubernetes (cert-manager): Obnova probíhá automaticky.

7. Ověření

# Verify TLS configuration
openssl s_client -connect vault.example.com:443 -servername vault.example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates -subject

# Check certificate chain
openssl s_client -connect vault.example.com:443 -showcerts < /dev/null

# Test with curl
curl -v https://vault.example.com/api/v1/health

8. Vlastní CA pro odchozí spojení (SMTP, LDAP atd.)

Pokud váš SMTP server, LDAP adresář nebo jiná externí služba používá certifikát podepsaný privátní / firemní CA, backend kontejner MazeVault musí této CA důvěřovat. Bez toho odchozí TLS spojení selžou s chybou:

x509: certificate signed by unknown authority

Docker Compose

  1. Umístěte certifikát CA (ve formátu PEM) na cestu dostupnou hostu, např. ./certs/corporate-ca.crt.
  2. Připojte certifikát a aktualizujte úložiště důvěryhodných certifikátů:
services:
  mazevault-backend:
    volumes:
      - ./certs/corporate-ca.crt:/usr/local/share/ca-certificates/corporate-ca.crt:ro
    entrypoint: ["/bin/sh", "-c", "update-ca-certificates && exec ./main"]
  1. Restartujte službu: docker compose up -d mazevault-backend.

Kubernetes

Vytvořte ConfigMap ze souboru CA a připojte jej:

apiVersion: v1
kind: ConfigMap
metadata:
  name: corporate-ca
data:
  corporate-ca.crt: |
    -----BEGIN CERTIFICATE-----
    <obsah vašeho CA certifikátu>
    -----END CERTIFICATE-----
---
# Ve specifikaci Deploymentu backendu:
volumes:
  - name: corporate-ca
    configMap:
      name: corporate-ca
containers:
  - name: mazevault-backend
    volumeMounts:
      - name: corporate-ca
        mountPath: /usr/local/share/ca-certificates/corporate-ca.crt
        subPath: corporate-ca.crt
        readOnly: true
    command: ["/bin/sh", "-c", "update-ca-certificates && exec ./main"]

Ověření

# Z běžícího kontejneru:
docker exec mazevault-backend openssl s_client -connect smtp.example.com:587 -starttls smtp < /dev/null 2>&1 | head -20

Úspěšné spojení zobrazí Verify return code: 0 (ok).

Související