37 lines
1.4 KiB
Bash
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}"
|