iac/nginx/gen-cert.sh

37 lines
1.4 KiB
Bash

#!/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}"