Генерация корневого сертификата и новых сертификатов подписанных им
This commit is contained in:
parent
a5ee241e15
commit
7ca246db3f
56
generate_root_ca.sh
Executable file
56
generate_root_ca.sh
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Настройки
|
||||||
|
CERT_DIR="$HOME/certs"
|
||||||
|
CA_NAME="myrootca"
|
||||||
|
DAYS=3650 # 10 лет
|
||||||
|
|
||||||
|
# Цвета
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
echo "Генерация корневого сертификата (Root CA)..."
|
||||||
|
|
||||||
|
# 1. Создание директории
|
||||||
|
mkdir -p "$CERT_DIR"
|
||||||
|
cd "$CERT_DIR" || exit 1
|
||||||
|
|
||||||
|
# Проверка: если CA уже существует, предупреждаем
|
||||||
|
if [ -f "${CA_NAME}.crt" ] && [ -f "${CA_NAME}.key" ]; then
|
||||||
|
echo -e "${RED}Внимание!${NC} Файлы ${CA_NAME}.crt и ${CA_NAME}.key уже существуют."
|
||||||
|
read -p "Перезаписать их? (это аннулирует все ранее выданные сертификаты) [y/N]: " confirm
|
||||||
|
if [[ ! $confirm =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Отменено."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Генерация приватного ключа (4096 бит)
|
||||||
|
echo "Генерация приватного ключа..."
|
||||||
|
openssl genrsa -out "${CA_NAME}.key" 4096 2>/dev/null
|
||||||
|
chmod 600 "${CA_NAME}.key" # Защита ключа
|
||||||
|
|
||||||
|
# 3. Генерация самоподписанного сертификата
|
||||||
|
echo "Генерация корневого сертификата..."
|
||||||
|
openssl req -x509 -new -nodes \
|
||||||
|
-key "${CA_NAME}.key" \
|
||||||
|
-sha256 \
|
||||||
|
-days ${DAYS} \
|
||||||
|
-out "${CA_NAME}.crt" \
|
||||||
|
-subj "/C=RU/ST=State/L=City/O=MyOrg/CN=TrueNAS Root CA"
|
||||||
|
|
||||||
|
# Проверка результата
|
||||||
|
if [ -f "${CA_NAME}.crt" ]; then
|
||||||
|
echo -e "${GREEN}Успешно!${NC}"
|
||||||
|
echo "Файлы созданы в: $CERT_DIR"
|
||||||
|
echo " Ключ: ${CA_NAME}.key (храните в секрете!)"
|
||||||
|
echo " Серт: ${CA_NAME}.crt (установите этот файл на все клиентские устройства)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Информация о сертификате:"
|
||||||
|
openssl x509 -in "${CA_NAME}.crt" -noout -subject -dates
|
||||||
|
else
|
||||||
|
echo -e "${RED}Ошибка при создании сертификата.${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
93
generate_signed_cert.sh
Executable file
93
generate_signed_cert.sh
Executable file
@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Настройки
|
||||||
|
CERT_DIR="$HOME/certs"
|
||||||
|
CA_KEY="$CERT_DIR/truenasrootca.key"
|
||||||
|
CA_CRT="$CERT_DIR/truenasrootca.crt"
|
||||||
|
|
||||||
|
# Цвета для вывода
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
# Функция для вывода ошибок
|
||||||
|
error() {
|
||||||
|
echo -e "${RED}[ERROR]${NC} $1" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для вывода успеха
|
||||||
|
success() {
|
||||||
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверка аргументов
|
||||||
|
if [ "$#" -ne 3 ]; then
|
||||||
|
echo "Использование: $0 <имя_сертификата> <DNS_имя> <IP_адрес>"
|
||||||
|
echo "Пример: $0 truenas truenas.local 192.168.0.137"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CERT_NAME="$1"
|
||||||
|
DNS_NAME="$2"
|
||||||
|
IP_ADDR="$3"
|
||||||
|
|
||||||
|
# Переход в директорию сертификатов
|
||||||
|
mkdir -p "$CERT_DIR"
|
||||||
|
cd "$CERT_DIR" || error "Не удалось перейти в директорию $CERT_DIR"
|
||||||
|
|
||||||
|
# 1. Проверка наличия корневого CA
|
||||||
|
if [ ! -f "$CA_KEY" ] || [ ! -f "$CA_CRT" ]; then
|
||||||
|
error "Корневой сертификат не найден! ($CA_CRT / $CA_KEY)"
|
||||||
|
echo "Сначала создайте Root CA или убедитесь, что файлы лежат в $CERT_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Генерация сертификата для: ${CERT_NAME}${NC}"
|
||||||
|
echo "DNS: $DNS_NAME"
|
||||||
|
echo "IP: $IP_ADDR"
|
||||||
|
|
||||||
|
# 2. Генерация приватного ключа сервера
|
||||||
|
# (Пересоздаем ключ, если он уже есть, чтобы не было конфликтов)
|
||||||
|
openssl genrsa -out "${CERT_NAME}.key" 4096 2>/dev/null || error "Не удалось создать ключ"
|
||||||
|
chmod 600 "${CERT_NAME}.key" # Защита ключа
|
||||||
|
|
||||||
|
# 3. Создание файла расширений (v3.ext) динамически
|
||||||
|
cat > "${CERT_NAME}.ext" << EOF
|
||||||
|
authorityKeyIdentifier=keyid,issuer
|
||||||
|
basicConstraints=CA:FALSE
|
||||||
|
keyUsage = digitalSignature, keyEncipherment
|
||||||
|
subjectAltName = @alt_names
|
||||||
|
|
||||||
|
[alt_names]
|
||||||
|
DNS.1 = ${DNS_NAME}
|
||||||
|
IP.1 = ${IP_ADDR}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# 4. Создание CSR (Certificate Signing Request)
|
||||||
|
openssl req -new -key "${CERT_NAME}.key" -out "${CERT_NAME}.csr" \
|
||||||
|
-subj "/CN=${DNS_NAME}" 2>/dev/null || error "Не удалось создать CSR"
|
||||||
|
|
||||||
|
# 5. Подпись сертификата корневым CA
|
||||||
|
openssl x509 -req -in "${CERT_NAME}.csr" \
|
||||||
|
-CA "$CA_CRT" -CAkey "$CA_KEY" -CAcreateserial \
|
||||||
|
-out "${CERT_NAME}.crt" -days 3650 -sha256 \
|
||||||
|
-extfile "${CERT_NAME}.ext" 2>/dev/null || error "Не удалось подписать сертификат"
|
||||||
|
|
||||||
|
# 6. Очистка временных файлов (CSR и ext)
|
||||||
|
# Если вам нужен CSR для других целей, закомментируйте следующую строку
|
||||||
|
rm -f "${CERT_NAME}.csr" "${CERT_NAME}.ext"
|
||||||
|
|
||||||
|
# 7. Финальный вывод
|
||||||
|
success "Сертификат успешно создан!"
|
||||||
|
echo "Файлы:"
|
||||||
|
echo " Ключ: $CERT_DIR/${CERT_NAME}.key"
|
||||||
|
echo " Серт: $CERT_DIR/${CERT_NAME}.crt"
|
||||||
|
echo "Подписан с помощью: (использовать для установки доверия на клиентах)"
|
||||||
|
|
||||||
|
# Проверка содержимого
|
||||||
|
echo ""
|
||||||
|
echo "Информация о сертификате:"
|
||||||
|
openssl x509 -in "${CERT_NAME}.crt" -noout -text | grep -A1 "Subject Alternative Name"
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user