Files
shopdb-flask/certs/regenerate-server-cert.sh
Proudlock fd6240772e Add server certificate management documentation and regeneration scripts
Documentation:
- certs/README.md: Complete guide for managing nginx TLS certificates
- Server cert generation (self-signed, CA-signed, Let's Encrypt)
- Certificate expiry monitoring and renewal procedures
- Agent certificate pinning configuration
- Air-gapped deployment notes

Tooling:
- certs/regenerate-server-cert.sh: Bash script for cert regeneration
- certs/regenerate-server-cert.ps1: PowerShell script for Windows
- Both scripts backup old certs and display new thumbprint

Config:
- Updated .gitignore to allow cert management files (docs/scripts/config)
- Private keys and actual certificates still excluded (security)

Context:
- User asked where to manage server-side certificate
- Current cert: self-signed, CN=localhost, valid 1 year
- Agents validate server cert via pinning or Windows trusted roots
- Critical for mTLS client cert authentication (ADR-006)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-14 14:47:37 -04:00

53 lines
1.5 KiB
Bash

#!/bin/bash
# Regenerate self-signed server certificate for ShopDB nginx
# Run this script from the repository root: bash certs/regenerate-server-cert.sh
set -e
CERT_DIR="certs"
DAYS_VALID=365
echo "=== ShopDB Server Certificate Generator ==="
echo ""
# Check if running from repo root
if [ ! -f "docker-compose.yml" ]; then
echo "ERROR: Must run from repository root"
echo "Usage: bash certs/regenerate-server-cert.sh"
exit 1
fi
# Backup old certificate
if [ -f "$CERT_DIR/server.crt" ]; then
echo "Backing up existing certificate..."
cp "$CERT_DIR/server.crt" "$CERT_DIR/server.crt.backup"
cp "$CERT_DIR/server.key" "$CERT_DIR/server.key.backup"
OLD_EXPIRY=$(openssl x509 -in "$CERT_DIR/server.crt" -noout -enddate)
echo " Old certificate: $OLD_EXPIRY"
fi
# Generate new certificate
echo ""
echo "Generating new self-signed certificate (valid $DAYS_VALID days)..."
openssl req -x509 -newkey rsa:2048 -nodes \
-keyout "$CERT_DIR/server.key" \
-out "$CERT_DIR/server.crt" \
-days $DAYS_VALID \
-config "$CERT_DIR/openssl.cnf" 2>/dev/null
echo ""
echo "Certificate generated successfully!"
echo ""
# Show certificate details
echo "=== Certificate Details ==="
openssl x509 -in "$CERT_DIR/server.crt" -noout -subject -dates -fingerprint -sha256
echo ""
echo "=== Next Steps ==="
echo "1. Restart nginx: docker-compose restart nginx"
echo "2. If agents use ServerCertThumbprint pinning:"
echo " - Update appsettings.json with new thumbprint (shown above)"
echo " - Restart all agents BEFORE old certificate expires"
echo ""