← все скрипты

cert-gen.sh

bash ~ 55 строк обновлён 19 февраля 2026

Генерация самоподписанных TLS-сертификатов для dev-окружений за одну команду. Создаёт собственный CA (Certificate Authority), серверный сертификат и ключ. Удобно для локальной разработки с HTTPS без Let's Encrypt.

Зависимости

Использование

chmod +x cert-gen.sh

# Генерация сертификата для домена
./cert-gen.sh myapp.local

# С указанием директории для файлов
./cert-gen.sh myapp.local ./certs

# Результат: ca.pem, server.key, server.crt

После генерации добавьте ca.pem в доверенные корневые сертификаты браузера для устранения предупреждений.

Код

#!/usr/bin/env bash
set -euo pipefail

# cert-gen.sh — генерация самоподписанных TLS-сертификатов
# Использование: ./cert-gen.sh <domain> [output_dir=./certs]

DOMAIN="${1:?Укажите домен, например: myapp.local}"
OUT_DIR="${2:-./certs}"
DAYS=365

mkdir -p "$OUT_DIR"

CA_KEY="$OUT_DIR/ca.key"
CA_CERT="$OUT_DIR/ca.pem"
SRV_KEY="$OUT_DIR/server.key"
SRV_CSR="$OUT_DIR/server.csr"
SRV_CERT="$OUT_DIR/server.crt"
SRV_EXT="$OUT_DIR/server.ext"

echo "▸ Генерация CA..."
openssl genrsa -out "$CA_KEY" 2048 2>/dev/null
openssl req -x509 -new -nodes -key "$CA_KEY" -sha256 -days "$DAYS" \
    -subj "/C=RU/ST=Dev/O=LocalCA/CN=LocalCA" \
    -out "$CA_CERT" 2>/dev/null

echo "▸ Генерация серверного ключа и CSR..."
openssl genrsa -out "$SRV_KEY" 2048 2>/dev/null
openssl req -new -key "$SRV_KEY" \
    -subj "/C=RU/ST=Dev/O=LocalDev/CN=$DOMAIN" \
    -out "$SRV_CSR" 2>/dev/null

# Расширения для SAN (Subject Alternative Name)
cat > "$SRV_EXT" <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature,nonRepudiation,keyEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1=$DOMAIN
DNS.2=*.$DOMAIN
IP.1=127.0.0.1
EOF

echo "▸ Подпись сертификата..."
openssl x509 -req -in "$SRV_CSR" -CA "$CA_CERT" -CAkey "$CA_KEY" \
    -CAcreateserial -out "$SRV_CERT" -days "$DAYS" -sha256 \
    -extfile "$SRV_EXT" 2>/dev/null

# Очистка временных файлов
rm -f "$SRV_CSR" "$SRV_EXT" "$OUT_DIR/ca.srl"

echo ""
echo "✓ Сертификаты созданы в $OUT_DIR/"
echo "  CA:          $CA_CERT"
echo "  Ключ:        $SRV_KEY"
echo "  Сертификат:  $SRV_CERT"
echo "  Домен:       $DOMAIN, *.$DOMAIN"
echo "  Срок:        $DAYS дней"