#!/usr/bin/env bash # selfsigned.sh — create a long-lived self-signed cert with SANs # Usage: sudo ./selfsigned.sh [days] [outdir] set -euo pipefail # Prompt for domain if not provided read -rp "Enter the domain (e.g., panel.example.com): " DOMAIN if [[ -z "$DOMAIN" ]]; then echo "Domain cannot be empty." >&2 exit 1 fi DAYS="${1:-36500}" # Default: 100 years OUTDIR="${2:-/etc/ssl/selfsigned/$DOMAIN}" command -v openssl >/dev/null 2>&1 || { echo "openssl is required"; exit 1; } mkdir -p "$OUTDIR" chmod 700 "$OUTDIR" CONF="$OUTDIR/openssl.cnf" KEY="$OUTDIR/$DOMAIN.key" CRT="$OUTDIR/$DOMAIN.crt" PEM="$OUTDIR/$DOMAIN.pem" cat > "$CONF" < "$PEM" chmod 600 "$KEY" "$CRT" "$PEM" echo "✅ Self-signed certificate created:" echo " Cert : $CRT" echo " Key : $KEY" echo " PEM : $PEM" echo " Conf : $CONF" echo echo "📌 Add this to your nginx config:" echo " ssl_certificate $CRT;" echo " ssl_certificate_key $KEY;"