#!/usr/bin/env bash # Генерация самоподписанного TLS-сертификата для верхнего nginx. # # Использование: # ./nginx/gen-cert.sh # домены по умолчанию # ./nginx/gen-cert.sh sarex.local api.sarex.local # свои домены (первый → CN) # DAYS=730 ./nginx/gen-cert.sh # свой срок действия # # Результат: nginx/certs/selfsigned.{crt,key} (в .gitignore). # MSYS_NO_PATHCONV=1 нужен для Git Bash на Windows; на Linux он безвреден. set -euo pipefail CERT_DIR="$(cd "$(dirname "$0")" && pwd)/certs" DAYS="${DAYS:-365}" if [ "$#" -gt 0 ]; then DOMAINS=("$@") else DOMAINS=(sarex.local admin.sarex.local minio.sarex.local) fi # subjectAltName из списка доменов, CN — первый домен SAN="" for d in "${DOMAINS[@]}"; do SAN="${SAN}${SAN:+,}DNS:${d}"; done CN="${DOMAINS[0]}" mkdir -p "$CERT_DIR" cd "$CERT_DIR" # пишем относительными именами: не ломается конверсия путей в Git Bash MSYS_NO_PATHCONV=1 openssl req -x509 -nodes -newkey rsa:2048 -days "$DAYS" \ -keyout selfsigned.key \ -out selfsigned.crt \ -subj "/CN=${CN}" \ -addext "subjectAltName=${SAN}" echo "OK: сертификат на ${DAYS} дней → $CERT_DIR/selfsigned.{crt,key}" echo "SAN: ${SAN}"